有选择地使用 chmod 命令

有选择地使用 chmod 命令

我想对特定目录下的所有文件和子目录设置755权限,但我只想对那些没有755权限的组件执行chmod 755。

find /main_directory/ -exec chmod 755 {} \;

如果该find命令返回一个很长的列表,这将花费很多时间。我知道我可以使用 stat 命令检查每个组件的八进制文件级别权限,然后使用 if-else 切换文件权限,但是是否有任何单行方法使用findxargs首先检查文件/目录具有什么权限,然后chmod如果设置为其他值,则使用将其更改为 755。

答案1

如果您想更改文件和目录的权限,那么使用(至少从性能角度来看)755没有真正的好处,您可以这样做find

chmod -R 755 /main_directory

如果您确实想find避免更改已拥有755权限的事物的权限(以避免更新其 ctime 时间戳),那么您还应该测试每个目录和文件的当前权限:

find /main_directory ! -perm 0755 -exec chmod 755 {} +

-exec ... {} +收集尽可能多的通过! -perm 0755测试的路径名,并chmod立即对所有路径名执行。

通常,人们希望分别更改文件和目录的权限,以便并非所有文件都是可执行的:

find /main_directory   -type d ! -perm 0755 -exec chmod 755 {} +
find /main_directory ! -type d ! -perm 0644 -exec chmod 644 {} +

答案2

正如find已经掌握的-exec ... +语法一样,使用 没有多大意义xargs,但正如您所要求的那样:

find /main_directory -not -perm 0755 | xargs chmod 755

相关内容