我有这个:
#!/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 ... +