質問: unixは、sshを実行するときにパス内のワイルドカードが機能しないことを検出します 検索パスに*が含まれるこのコマンドは、ローカルサーバーで正常に機能しますsvr1$ find /path/*/foo/ -name "*20160208" 別のサーバーからリモートでこれを試してみると、機能しませんsvr2$ ssh svr1 find '/path/*/foo/' -name "*20160208*" エラーメッセージは次のとおりです。find: stat() error /path/*/foo/: no such file or directory ただし、*を使用しないように検索パスを変更すると、正常に機能します。このような:svr2$ ssh svr1 find '/path/' -name "*20160208*" 私が間違っていることについて何か考えはありますか?どうもありがとう。
回答: 問題は、findコマンドがディレクトリグロブ(シークする必要のあるディレクトリリスト)を補間/解釈せず、一致する必要のあるグロブとしてパターンを補間するだけであるということです。ディレクトリグロブを解釈するのは、実行するシェル自体ですfind内部。 ssh経由でfindを実行すると、このジョブを実行するシェルはありません。幸いなことに、sshを介してシェルを実行することに対する規則はなく、必要なすべてのものを補間し、残りのワイルドカードをfind自体に保持して、シェルにコマンドを実行させます。私が自分のマシンで使用したもののようなもの:ssh lx@localhost "bash -c '/usr/bin/find /tmp/d* -name \"f*\" '" lx@localhost's password: /tmp/d1/f1 /tmp/d2/f2