我想对特定目录下的所有文件和子目录设置755权限,但我只想对那些没有755权限的组件执行chmod 755。
find /main_directory/ -exec chmod 755 {} \;
如果该find
命令返回一个很长的列表,这将花费很多时间。我知道我可以使用 stat 命令检查每个组件的八进制文件级别权限,然后使用 if-else 切换文件权限,但是是否有任何单行方法使用find
并xargs
首先检查文件/目录具有什么权限,然后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