我有以下命令
find . -type f -print0 | xargs -0 chmod 644
只要文件名不包含嵌入空格,这将成功将 . 中的所有文件的权限更改为 644。但是,它通常不起作用。
例如
touch "hullo world"
chmod 777 "hullo*"
find . -type f -print0 | xargs -0 chmod 644
返回
/bin/chmod: cannot access `./hello': No such file or directory
/bin/chmod: cannot access `world': No such file or directory
有没有办法修改命令,以便它可以处理嵌入空格的文件?
非常感谢您的建议。
答案1
没有xargs
find . -type f -exec chmod 644 {} \;
或xargs
find . -type f -print0 | xargs -0 -I {} chmod 644 {}
使用的xargs
开关
-0
如果有空格或字符(包括换行符),许多命令将不起作用。此选项处理带有空格的文件名。-I
将 initial-arguments 中出现的 replace-str 替换为从标准输入读取的名称。另外,未加引号的空格不会终止输入项;相反,分隔符是换行符。
解释摘自这里