![このコマンドは何をしますか?オプション付きのコマンドを検索します](https://rvso.com/image/1157173/%E3%81%93%E3%81%AE%E3%82%B3%E3%83%9E%E3%83%B3%E3%83%89%E3%81%AF%E4%BD%95%E3%82%92%E3%81%97%E3%81%BE%E3%81%99%E3%81%8B%EF%BC%9F%E3%82%AA%E3%83%97%E3%82%B7%E3%83%A7%E3%83%B3%E4%BB%98%E3%81%8D%E3%81%AE%E3%82%B3%E3%83%9E%E3%83%B3%E3%83%89%E3%82%92%E6%A4%9C%E7%B4%A2%E3%81%97%E3%81%BE%E3%81%99.png)
しかし、質問です。このコマンドは何をしますか? 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