8

たとえば、次のように find コマンドを使用します。

find . -name "*.log" -exec grep "running" {} \;

なぜ find のコマンドには{}、空白と? が必要なの\ですか?

4

4 に答える 4

14

これは、-execパラメーターが原因です。これは{}、コマンドに渡されるファイルのプレースホルダーです。

セミコロン ( ;) はfind-exec引数リストが終了したことを示し;ますが、シェル演算子でもあるため、次のようにエスケープする必要がありますfind\;

-exec次のように動作します: 見つかったすべてのファイルについて、-exec(コマンド) の後の最初の引数が実行され、までのすべてのパラメーター;が引数としてコマンドに渡されます。は{}、 によって検出された現在のファイル名に置き換えられますfind

于 2012-09-14T08:17:36.583 に答える
2

{}path のプレースホルダーでfind、実際に見つかったパスに置き換えられます。

\;find のexec引数を終了します。シェルがない\と、それはシェル ステートメント ターミネータとして扱われる\ため、シェルが find に渡す;には、で囲む必要があります。

コマンドターミネーター;としては残念な選択だったと思います。find exec

{} \;シーケンスは次のように置き換えることができることに注意してください{} +

   -exec command {} +
          This variant of the -exec action runs the specified  command  on
          the  selected  files, but the command line is built by appending
          each selected file name at the end; the total number of  invoca‐
          tions  of  the  command  will  be  much  less than the number of
          matched files.  The command line is built in much the  same  way
          that  xargs builds its command lines.  Only one instance of `{}'
          is allowed within the command.  The command is executed  in  the
          starting directory.
于 2012-09-14T08:18:00.647 に答える
1

マンページを読むだけ

-exec command ;

          Execute  command;  true  if 0 status is returned.  All following
          arguments to find are taken to be arguments to the command until
          an  argument  consisting of `;' is encountered.  The string `{}'
          is replaced by the current file name being processed  everywhere
          it occurs in the arguments to the command, not just in arguments
          where it is alone, as in some versions of find.  Both  of  these
          constructions might need to be escaped (with a `\') or quoted to
          protect them from expansion by the shell.  See the EXAMPLES sec‐
          tion for examples of the use of the -exec option.  The specified
          command is run once for each matched file.  The command is  exe‐
          cuted  in  the starting directory.   There are unavoidable secu‐
          rity problems surrounding use of the -exec  action;  you  should
          use the -execdir option instead.
于 2012-09-14T08:22:16.910 に答える
0

バックスラッシュは、セミコロンが誤って解釈されるのを防ぐためのエスケープです。中括弧は、findによって出力されるフルパスのプレースホルダーです。

于 2012-09-14T08:22:31.037 に答える