touch 1.txt 2.txt
find . -name "[12].txt" -exec sh -c 'echo "${1}"' sh {} + -exec echo {} +
./2.txt
./2.txt ./1.txt
echo
内部的にsh -c
1つのファイルしか出力されないのはなぜですか?今日は、find
それがどのように機能するのか理解していると思います。「find」の-execオプションについてところで今また混乱しています。同じ結果を得ました-exec bash
。ティア
答え1
そして:
-exec sh -c 'echo "${1}"' sh {} +
find
sh
最初に要求したsh
ファイル(${1}
または$1
単に)にできるだけ多くのファイルを渡しますecho
。それらすべてを渡すには、代わりに次を使用します"$@"
。
-exec sh -c 'echo "$@"' sh {} +
またはsh
、各引数に対して一度呼び出すには、位置引数を持つループを使用します(位置引数は、デフォルトでループが繰り返す項目です)。echo
for
-exec sh -c 'for file do
echo "$file"
done' sh {} +