如何修改查找函数循环来处理反斜杠和空格?

如何修改查找函数循环来处理反斜杠和空格?

目前,我正在尝试解析目录中的所有文件。我有一个查找函数,但它似乎无法将带有空格的文件目录解析为循环。这里"$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 "{}" \;

答案3

你应该不解析输出find出于同样的原因你不应该解析ls

尝试使用find/exec代替:

find "$DIR" -type f -exec echo {} \;

相关内容