仅更改文件而不是目录的权限的命令

仅更改文件而不是目录的权限的命令

我有以下命令

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 替换为从标准输入读取的名称。另外,未加引号的空格不会终止输入项;相反,分隔符是换行符。

解释摘自这里

相关内容