回答:
-exec ... \;
次々にアイテムを実行します。したがって、3つのファイルがある場合、exec行は3回実行されます。
-exec ... {} +
一度に複数のファイルを取ることができコマンド用です(例えばcat
、stat
、ls
)。で見つかったファイルfind
は、xargs
コマンドのように連結されています。つまり、フォークアウトが少なく、小規模な操作の場合、大幅な高速化を意味します。
10,000個の空のファイルを処理するパフォーマンスデモを次に示します。
$ mkdir testdir
$ touch testdir/{0000..9999}
$ time find testdir/ -type f -exec cat {} \;
real 0m8.622s
user 0m0.452s
sys 0m8.288s
$ time find testdir/ -type f -exec cat {} +
real 0m0.052s
user 0m0.015s
sys 0m0.037s
繰り返しますが、これは複数のファイル名を取ることができるコマンドでのみ機能します。コマンドがそのようなものである場合は、マンページを見て解決できます。ここからの概要ですman cat
:
SYNOPSIS
cat [OPTION]... [FILE]...
オンの省略記号は[FILE]...
、複数のファイルを使用できることを意味します。
+
単一のコマンドでのみ使用でき{}
、行に1つだけが必要です。\;
複数のゼロ対多グループで動作できます。
+
、これはPOSIXではないため、Linux以外のシステムでは利用できない場合があります。プラットフォームを離れることはないが、Solarisを使用する必要があるかどうかを知っておくと便利です。:)
-exec <command> {} ';'
、タイピングが簡単だからです(タイプすることはできますが、最高のテクニックはありません)。
-exec ... {} +
POSIXです。参照:pubs.opengroup.org/onlinepubs/9699919799/utilities/...
-exec ... {} +
拡張機能が提案され、2004年にPOSIX第6号に批准されました。使用しているSolarisのバージョンは、そのPOSIX標準よりも古い(または以前のバージョンを対象とする)可能性があります。
\;
では、実行されるコマンドはになりますcat 1; cat 2; cat 3
。では+
、実行したコマンドは次のようになりますcat 1 2 3
。