【发布时间】:2011-01-17 09:17:57
【问题描述】:
我发现自己经常做以下事情:
for f in `find -foo -bar -baz`; do
process "$f"
done
这当然不适用于带有空格的文件名。我该如何处理这种情况?
【问题讨论】:
标签: bash command-line shell find
我发现自己经常做以下事情:
for f in `find -foo -bar -baz`; do
process "$f"
done
这当然不适用于带有空格的文件名。我该如何处理这种情况?
【问题讨论】:
标签: bash command-line shell find
Find 和 xargs 可以很好地协同工作。 find 可以使用\0-delimiter(选项print0)打印文件的名称,xargs 可以以该格式读取它们(选项-0):
find . -type f -print0 | xargs -0 echo
【讨论】:
find . -type f | while read file; do
process "$f"
done;
【讨论】:
while read -r 在文件名中使用文字反斜杠
如果你已经在使用 find ,为什么不直接使用 exec
find -foo -bar -baz -exec process '{}' \;
替代解决方案是更改 IFS 变量(字段间分隔符)
【讨论】:
重击 4
shopt -s globstar
for file in /path/**
do
process "$file"
done
【讨论】:
在这种情况下,我的方法是在for 命令之前构建列表,并将元素名称中的空格替换为另一个不太可能出现的字符或字符串。
然后在循环内,我用空格替换那个特定的字符串。
一个例子:
list=`find -foo -bar -baz | tr ' ' 'µ'`
for fx in $list ; do
f=`echo $fx | tr 'µ' ' '`
process "$f"
done
【讨论】: