私が理解したところ、一致する各ファイルに対して指定されたテストがfind -tests -execdir <command> '{}' ';'
実行されます。command
このコマンドは、-execdir
一致するファイルと同じ親ディレクトリで(一致する各ファイルに対して)実行され、{}
一致するファイルのデフォルト名を表します。
+
今、質問は、複数のファイルを同時に処理する代わりにを使用する場合、どのように達成されますか';'
?を使用すると、find -tests -execdir <command> '{}' +
すべてのファイルが指定されたコマンドの引数として提供されます(最大引数を超えないように)。<command>
どのように同時にすべての項目に対してfindを実行できますか?
ベストアンサー1
find
次のファイルが見つかったとしましょう。
./foo/bar
./foo/baz
./foo/quux
を使用する場合、-execdir [...]+
有効な結果コマンドは次のとおりです。
( cd ./foo; command bar baz quux )
以下を使用すると、その逆が(効果的に)なります-execdir [...] \;
。
( cd ./foo; command bar )
( cd ./foo; command baz )
( cd ./foo; command quux )
-exec
not も同様ですexecdir
が、作業ディレクトリを変更する代わりにパスを指定します。を使用する場合、-exec [...]+
有効な結果コマンドは次のとおりです。
command ./foo/bar ./foo/baz ./foo/quux
以下を使用すると、その逆が(効果的に)なります-exec [...] \;
。
command ./foo/bar
command ./foo/baz
command ./foo/quux
両方のディレクトリにあるファイルがどのように機能するかを見てみましょう。
$ tree
.
├── bar
│ ├── bletch
│ └── freeble
└── foo
├── bar
├── baz
└── quux
$ find . -type f -exec echo {} \;
./foo/baz
./foo/quux
./foo/bar
./bar/bletch
./bar/freeble
$ find . -type f -execdir echo {} \;
./baz
./quux
./bar
./bletch
./freeble
$ find . -type f -exec echo {} +
./foo/baz ./foo/quux ./foo/bar ./bar/bletch ./bar/freeble
$ find . -type f -execdir echo {} +
./baz ./quux ./bar
./bletch ./freeble