目前,我正在尝试解析目录中的所有文件。我有一个查找函数,但它似乎无法将带有空格的文件目录解析为循环。这里"$DIR"
是我想要搜索的目录。有谁知道如何修改它才能工作?谢谢。
for file in $(find "$DIR" -type f)
do
echo "$file"
done
答案1
find ... | xargs ...
和find ... -exec ...
都是比这更好的选择:要使用 shell 循环正确迭代查找结果,我们必须使用循环while read
:
while IFS= read -d '' -r filename; do
echo "$filename"
done < <(find "$dir" -type f -print0)
那里有很多东西需要解压:
- 我们用一个流程替代执行 find 命令并能够像读取文件一样读取结果。
- 要逐字读取一行输入,bash 习惯用法是
IFS= read -r line
。这允许将任意空格和反斜杠读入变量中。 read -d ''
使用空字节(由 生成-print0
)作为行尾字符而不是换行符。
答案2
你不需要for
循环这个。
find "$dir" -type f
默认情况下将输出所有找到的对象。
您可以通过以下方式明确这一点:
find "$dir" -type f -print
如果你真的想要迭代这些,请使用空分隔符和xargs
:
find "$dir" -type f -print0 | xargs -0 -n1 echo
或者find
自己的-exec
:
find "$dir" -type f -exec echo "{}" \;