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
调用一次,请对位置参数使用循环(位置参数是循环默认情况下循环的内容):echo
for
-exec sh -c 'for file do
echo "$file"
done' sh {} +