ファイルが3つある状態。
ls
a.txt b.txt c.txt
1-1. find ... -exec ... \;
引数は1つずつコマンドに渡される。次の例だと echo が3回実行される。
find . -name '*.txt' -exec echo {} \;
./c.txt
./b.txt
./a.txt
1-2. find ... -exec ... +
引数はまとめてコマンドに渡される。次の例だと echo は1回だけ実行される。
find . -name '*.txt' -exec echo {} +
./c.txt ./b.txt ./a.txt
2-1. xargs
引数はまとめてコマンドに渡される。次の例だと echo は1回だけ実行される。
find . -name '*.txt' | xargs echo
./c.txt ./b.txt ./a.txt
2-2. xargs -n 1
引数は1つずつコマンドに渡される。次の例だと echo が3回実行される。
find . -name '*.txt' | xargs -n 1 echo
./c.txt
./b.txt
./a.txt
-n
に指定する数によっていくつずつ渡すかコントロールできる。次の例は2つずつ。
find . -name '*.txt' | xargs -n 2 echo
./c.txt ./b.txt
./a.txt
ローカル(MacOS)の man を読んだら -n
のデフォルト値は 5000 。
xargs -n
は便利だね。