我想对特定目录下的所有文件和子目录设置 755 权限,但我只想对那些没有 755 权限的组件执行 chmod 755。
find /main_directory/ -exec chmod 755 {} \;
Run Code Online (Sandbox Code Playgroud)
如果该find
命令返回一长串列表,这将花费大量时间。我知道我可以使用 stat 命令来检查每个组件的八进制文件级别权限,然后使用 if-else 来切换文件权限,但是是否有任何单行方法使用find
并xargs
首先检查文件/目录具有什么权限,然后使用chmod
将其更改为 755(如果设置为其他内容)。
Kus*_*nda 21
如果您想更改755
文件和目录的权限,使用find
(至少从性能角度来看)没有真正的好处,您可以这样做
chmod -R 755 /main_directory
Run Code Online (Sandbox Code Playgroud)
如果您真的想使用find
来避免更改已拥有755
权限的事物的权限(以避免更新其 ctime 时间戳),那么您还应该测试每个目录和文件的当前权限:
find /main_directory ! -perm 0755 -exec chmod 755 {} +
Run Code Online (Sandbox Code Playgroud)
该-exec ... {} +
会收集尽可能多的路径名的可能,经过! -perm 0755
测试,并执行chmod
一次对所有的人。
通常,人们希望分别更改文件和目录的权限,以便并非所有文件都可以执行:
find /main_directory -type d ! -perm 0755 -exec chmod 755 {} +
find /main_directory ! -type d ! -perm 0644 -exec chmod 644 {} +
Run Code Online (Sandbox Code Playgroud)