linux - 递归地chmod

标签 linux shell find chmod

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

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

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

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

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

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

即我现在是怎么做的:

做:

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

直到我没有错误,然后

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

但一定有更好的办法。

最佳答案

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

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

~$ 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 - 同上,但只为 GroupOther 用户设置标志,不要触摸用户(所有者)权限
  • chmod go+X foo - 同上,但只适用于目录,不要碰文件
  • chmod -R go+X foo - 与上面相同,但对 foo
  • 的所有子目录递归

关于linux - 递归地chmod,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13377606/

相关文章:

linux - 如何获取Linux进程“使用”的内存?

linux - unix/linux shell 变量命名有什么规则吗?

bash - 一个接一个地运行命令,即使我暂停了第一个命令 (Ctrl-z)

linux - Gnome - 确定键盘布局

linux - 如何使用 gnuplot 绘制抖动图?

linux - 将值从 1 个 txt 文件附加到另一个文件时,使用 awk 删除空间?

json - 使用 jq 获取数组中 shell 定义的 JSON 对象内特定键的值

bash - 查找并替换为 sed

VBA Access - 在 Word 文档中查找和替换文本

javascript - 在嵌套数组中查找值