以下代码片段用于递归搜索文件并迭代它们。
find . -type f -not -name '*.ini' -print0 | while IFS= read -r -d '' filename; do
echo "$filename"
done
它给出了这个结果:
1.jpg
2.jpg
3.jpg
但是如果我想以某种方式处理文件
find . -type f -not -name '*.ini' -print0 | while IFS= read -r -d '' filename; do
echo "$filename"
echo "$(${ExternalApp} -someparams $filename 2> /dev/null| cut -f 2- -d: | cut -f 2- -d ' ' )"
done
循环在第一次迭代后终止,结果如下:
1.jpg
我最近更新了bash(我在MSYS的Windows上)。这里有什么问题?
答案 0 :(得分:4)
find
的输出。使用ssh
,ffmpeg
或mplayer
时,这是一个特别常见的问题。
如果根本不需要输入,您可以从/dev/null
重定向:
find . -type f -not -name '*.ini' -print0 | while IFS= read -r -d '' filename; do
echo "$filename"
# v-- here
echo "$(${ExternalApp} -someparams $filename < /dev/null 2> /dev/null |
cut -f 2- -d: | cut -f 2- -d ' ' )"
done