首页 文章

Chmod递归

提问于
浏览
202

我有一个存档,由其他人存档,我想在下载之后自动更改提取文件中的文件系统分支以获得读取权限 . (我无法改变存档的创建方式) .

我已经调查了这个帖子:chmod: How to recursively add execute permissions only to files which already have execute permission和其他一些人一样,但没有快乐 .

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

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

这些只是我到目前为止发现的少数几个,但可能更多 .

尝试查看没有 x 权限的目录时出现 find 错误,因此不会将其传递给 chmod . 我有什么方法可以自动完成这项工作?

即我现在怎么做:

做:

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

直到我没有错误,然后

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

但必须有更好的方法 .

5 回答

  • 11

    除了执行访问之外,您还需要读取访问权限才能列出目录 . 如果您只有执行权限,那么您可以找到目录中条目的名称,但没有其他信息(甚至不是类型,因此您不知道哪些条目是子目录) . 这对我有用:

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

    您可以将chmod与 X 模式字母(大写X)一起使用,仅为目录设置可执行标志 .

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

    ~$ 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 - 清除 foo 的eXecutable标志

    • chmod +x foo - 为 foo 设置eXecutable标志

    • chmod go+x foo - 与上述相同,但仅为Group和Other用户设置标志,请勿触摸User(所有者)权限

    • chmod go+X foo - 与上述相同,但仅适用于目录,请勿触摸文件

    • chmod -R go+X foo - 与上面相同,但为 foo 的所有子目录递归执行此操作

  • 153

    尝试同时更改所有持久性:

    chmod -R +xr
    
  • 108

    要使所有者可以写入所有内容,由组读取/执行,以及世界可执行文件:

    chmod -R 0755
    

    让一切都敞开:

    chmod -R 0777
    
  • 39

    使用 sh 扩展名将当前文件夹中的所有文件(不是文件夹)添加到文件夹(而不是文件夹)中的可执行权限 recursively

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

    *注意pipe (|)

相关问题