しかし、質問です。このコマンドは何をしますか? find コマンドは知っていますが、引用符で囲んだ式や -exec などのオプションについては知りません。
find /var -name "[0-9]*test[A-Z]" -exec {} /root/{}';'
答え1
find /var
find
ディレクトリから検索を開始するように指示します/var
。
-name "[0-9]*test[A-Z]"
find
は、パターンに一致するファイル/フォルダのみを返すように指示する検索パターンです"[0-9]*test[A-Z]"
。検索文字列を引用符で囲まない場合、シェルはその検索パターンを展開し、結果を実行しようとします。検索パターンを引用符で囲むと、それを の引数として渡しますfind /var -name
。
元の質問の の部分-exec...
には構文エラーがあり、次のようになります( dessert と daisy がコメントしたように、-exec {} /root/{} ';'
前のスペースに注意してください)。 は の検索結果に置き換えられる、次の引数を実行するように 指示します。 通常は、シェルの拡張を防ぐために、これらも引用符で囲む必要があります。';'
find
{}
find
最後に、 は、コマンドを実行するときにセクションが検索結果を処理する';'
方法を定義します。 は、find に、各検索結果に対して のコマンドを実行するように指示します。代わりにを使用すると、コマンドはすべての検索結果を展開して実行されます。 これも、シェルが展開して に引数を作成しないように、引用符で囲むかエスケープする必要があります。-exec
';'
-exec
'+'
-exec
find...-exec
";"
との違いを説明する小さな例を"+"
以下に示します。
[user@localhost test]$ find . -name "[0-9]*test[A-Z]" -exec echo "{}" ";"
./12ltestA
./1ltestA
[user@localhost test]$ find . -name "[0-9]*test[A-Z]" -exec echo "{}" "+"
./12ltestA ./1ltestA