find -exec bash -c {} +:为什么只有一个文件找到两个?

find -exec bash -c {} +:为什么只有一个文件找到两个?
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只输出一个文件?今天我想我明白了如何find运作了解“find”的 -exec 选项但现在又疑惑了。得到相同的结果-exec bash。 TIA

答案1

和:

-exec sh -c 'echo "${1}"' sh {} +

find将尽可能多的找到的文件传递给sh,并且您要求sh将第一个文件(${1}$1简称)传递给echo。要通过所有这些,请改用"$@"

-exec sh -c 'echo "$@"' sh {} +

或者,要为每个参数sh调用一次,请对位置参数使用循环(位置参数是循环默认情况下循环的内容):echofor

-exec sh -c 'for file do
               echo "$file"
             done' sh {} +

相关内容