Chmodrecursion地

我有一个存档,由其他人存档,我想在下载它之后自动更改提取的文件内的文件系统的分支以获得读取权限。 (我不能改变如何创build存档)。

我已经看了这个线程: chmod:如何recursion添加执行权限只有已经有执行权限的文件到其他一些,但没有喜悦。

这些目录最初有多个,但都是错误的标志,它们可能会显示为:

drwx------ d---rx--- drwxrwxr-x dr--r-xr-- 

这些只是我迄今发现的less数,但可能会更多。

尝试查看不具有x权限的目录时find错误,因此不会将其传递给chmod 。 到目前为止,我一直在做的是手动更改父目录的权限,然后进入子目录并为他们执行相同的操作。 但是这是很多手工劳动。 有没有办法自动做到这一点?

即我现在如何做:

做:

 $ chmod -R +x $ chmod -R +r 

直到我没有任何错误,那么

 $ find -type f -exec chmod -x {} + 

但是一定有更好的办法。

除了执行访问之外,还需要读取权限才能列出目录。 如果你只有执行权限,那么你可以find目录中的条目名称,但没有其他的信息(甚至没有types,所以你不知道哪个是子目录)。 这适用于我:

 find . -type d -exec chmod +rx {} \; 

您可以使用带有X模式字母(大写字母X)的chmod来仅为目录设置可执行标志。

在下面的例子中,可执行标志被清除,然后recursion地设置所有目录:

 ~$ mkdir foo ~$ mkdir foo/bar ~$ mkdir foo/baz ~$ touch foo/x ~$ touch foo/y ~$ chmod -R go-X foo ~$ ls -l foo total 8 drwxrw-r-- 2 wq wq 4096 Nov 14 15:31 bar drwxrw-r-- 2 wq wq 4096 Nov 14 15:31 baz -rw-rw-r-- 1 wq wq 0 Nov 14 15:31 x -rw-rw-r-- 1 wq wq 0 Nov 14 15:31 y ~$ chmod -R go+X foo ~$ ls -l foo total 8 drwxrwxr-x 2 wq wq 4096 Nov 14 15:31 bar drwxrwxr-x 2 wq wq 4096 Nov 14 15:31 baz -rw-rw-r-- 1 wq wq 0 Nov 14 15:31 x -rw-rw-r-- 1 wq wq 0 Nov 14 15:31 y 

一点解释:

  • chmod -x foo – 清除chmod -x fooeXecutable标志
  • chmod +x foo – 为foo设置eXecutable标志
  • chmod go+x foo – 与上述相同,但只为其他用户设置标志,请勿触摸用户 (所有者)权限
  • chmod go+X foo – 与上述相同,但只适用于目录,不要触摸文件
  • chmod -R go+X foo – 与上面相同,但对于foo所有子目录recursion地执行此操作

尝试同时更改所有的执行:

 chmod -R +xr 

为了使所有者都可写,读取/执行组和世界可执行文件:

 chmod -R 0755 

为了使一切都开放:

 chmod -R 0777 

使用sh扩展名将可执行权限recursion地添加到当前文件夹内的所有文件(不是文件夹):

find . -name '*.sh' -type f | xargs chmod +x

*注意pipe道( |