我正在尝试通过创建一个简单的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作为一个参数.如何更改拆分?
这个问题的通常解决方案是:
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循环.