web-dev-qa-db-ja.com

rm {} +は何をしますか?

のように

find -L /etc/ssl/certs/ -type l -exec rm {} +

したがって、壊れたシンボリックリンクをすべて見つけて削除します。しかし、{} +の部分をどのように正確に解釈しますか?

3
yanchenko

{}ビットは、execコマンドのプレースホルダーです。 findによって検出されたファイルはすべて、角かっこの代わりに挿入されます。 +は、見つかったファイルの長いリストを作成し、従来の-exec {} \;バリアントのように、一度に1つずつではなく、一度にすべてのファイルに対してexecを呼び出すことを意味します。

5
Insyte

man findから:

   -exec command {} +
   This variant of the -exec option 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.

したがって、コマンドを呼び出します。

rm [filename1] [filename2] [...] [lastfilename]

引数リストに収まらないほど多くのファイルがある場合、rmが複数回呼び出されます。 (これはxargsが行うことです。)

{} +がないと、引数なしでrmを何度も呼び出すことになります。

11
Ben S