如何处理“find”中名称中包含空格的目录?

如何处理“find”中名称中包含空格的目录?

我有这个:

#!/bin/bash

for file in `find . -type d`
do
  echo $file
done

如果我只有一个名为 的目录My Directory,则输出为

My
Directory

我该如何解决?

echo $file只是暂时的。那里还会有其他代码对目录进行操作。

答案1

像下面这样的作品......

find . -type d | while read dir; do echo $dir; done
.
./my dir

根据您正在做的事情,您可能更好地使用find's-print0选项和xargs -0

您获得的代码获取未加引号的输出find并将其用作单词列表(按空格分割)以for进行迭代。

答案2

不要使用for循环,while而是使用:

find . -type d -print0 | while read -d '' -r dir; do echo "$dir"; done

选项print0在文件/目录名称末尾打印 NULL 字符(而不是换行符)并read -d ''正确解释它。

答案3

您可以在示例中使用“$file”。

答案4

在回答您的答案之前,我强烈建议您阅读两个问题:

对于你的问题,你不需要循环for,只需找到它自己:

find -type d

如果你想做更多的事情,只需使用-exec选项(或者-execdir如果你的find支持):

find -type d -exec ... +

相关内容