当目录名称中包含空格时使用查找结果

Gie*_*lis 5 bash shell

我正在尝试通过创建一个简单的bash for循环来更改所有子目录的权限:

for dir in `find . -type d`; do chmod 755 "$dir"; done
Run Code Online (Sandbox Code Playgroud)

但是,它抱怨不存在的目录.通过简单地从循环中打印目录名称(替换chmod 755 "$dir"echo "$dir"),我发现当目录名称中有空格时会出现问题.会发生什么是for循环分割find每个换行符空格的结果.

我想以某种方式使它根据换行符分割结果并忽略空格.双引号应确保字符串chmod作为一个参数.如何更改拆分?

Dig*_*oss 7

这个问题的通常解决方案是:

find ... -print0 | xargs -0 ...
Run Code Online (Sandbox Code Playgroud)

-print0参数导致输出文件名以nul结尾,而xargs 的-0/ -null参数告诉它读取这样的格式.

所以在你的情况下......

$ find . -type d -a -print0 | xargs -0 chmod 755
Run Code Online (Sandbox Code Playgroud)

实际上你根本不需要shell循环.