递归chmod:rw用于文件,rwx用于目录


28

我想要chmod很多文件和目录。如x指示目录和执行常规文件的列表,我想申请rw文件和rwx目录。是否可以仅使用chmod命令?

如果不是,最方便的方法是什么?

这样做chmod -R 770是不可能的,因为我不希望常规文件成为可执行文件。


1
您是否真的要对文件和目录进行公共写许可?这意味着您不在乎谁伪造任何文件?
乔纳森·勒夫勒

真正。我在上面改了
删除

Answers:


19

我有时使用单个find命令来执行此操作。丑陋但有效。

find /p/a/t/h \( -type d -exec chmod 755 {} \; \) -o \( -type f -exec chmod 644 {} \; \)

只是在路径包含空格的情况下,是否不需要引用“ {}”?喜欢find . -type d -exec chmod -vc 755 "{}" \;(包括-vc一些反馈)。(也许只是为了澄清,将两个独立的命令也添加到答案中?)
Arjan

不,{}不需要引号(我刚刚测试过,可以肯定)。当find在命令中插入{}时,可以正确转义。我没有查找find的内部工作原理,但是我假设它创建了一个参数数组以传递给exec(),并且会将文件名strcpy()放入数组中。当chmod查看其参数时,它将正确显示。
baumgart

35

在手册页中使用X权限:

如果文件是目录,则执行/搜索位或任何执行/搜索位都设置为原始(未修改)模式。带有烫发符号“ X”的操作仅与操作符“ +”结合使用才有意义,在所有其他情况下都将被忽略。

因此,请执行以下操作:

chmod -R a-x [directory]
chmod -R a+rwX [directory]

这会从所有文件和目录中删除执行位,然后为所有内容添加读取和写入权限,并仅对目录执行权限。(从第一步开始,常规文件就不再具有执行位。)


1
这不会在常规文件上强制使用模式666。如果常规文件已设置,则不会清除常规文件的可执行位。
09年

那么在这种情况下,您可以chmod -R a-x [directory]紧随其后chmod -R a+rwX [directory]吗?
jwaddell,2009年

@jwaddel:应该可以。你移除所有执行位,无论文件/目录类型,然后添加到执行只目录和普通文件已对执行位(这是现在没有。)
奔小号

完成后a-x,将无法访问该目录。实际上,chmod失败,权限被拒绝,并且不会从目录内的文件中删除可执行位。有没有办法做到这一点而无需root?
阿瓦卡

14

您还可以find与结合使用xargs

find . -type f -print0 | xargs -0 chmod 666
find . -type d -print0 | xargs -0 chmod 777

其中-type指定d irectory或˚F ILE。


1
xargs是否没有长度限制?这是很多文件和目录。
删除

2
我先做目录,然后做文件。否则,由于缺少权限,您可能会错过一些子树。另外,您应该检查列表是在chmod之前还是之后进行筛选,否则,与上面相同。是的,我将避免使用xargs。
Stefano Borini,2009年

1
xargs足够聪明,可以将较长的命令行分解为多个执行。请查阅您的xargs联机帮助页,并确保进行检查xargs --show-limits
2014年
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.