我发现自己经常做以下事情:
for f in `find -foo -bar -baz`; do
process "$f"
done
这当然不适用于带空格的文件名。我该如何处理这类案件?
答案 0 :(得分:4)
Find和xargs一起工作得很好。 find可以使用\0
- 分隔符(选项print0
)打印文件的名称,xargs可以以该格式读取它们(选项-0
):
find . -type f -print0 | xargs -0 echo
答案 1 :(得分:2)
find . -type f | while read file; do
process "$f"
done;
答案 2 :(得分:1)
如果您已经使用了find,为什么不简单地使用exec
find -foo -bar -baz -exec process '{}' \;
替代解决方案是更改IFS变量(场间分离器)
答案 3 :(得分:1)
bash 4
shopt -s globstar
for file in /path/**
do
process "$file"
done
答案 4 :(得分:0)
在这种情况下,我的方法是在for
命令之前构建列表,并将元素名称中的空格替换为不太可能出现的另一个字符或字符串。
然后在循环中,我用空格替换那个特定的字符串。
一个例子:
list=`find -foo -bar -baz | tr ' ' 'µ'`
for fx in $list ; do
f=`echo $fx | tr 'µ' ' '`
process "$f"
done