需要修复用户主目录中的文件权限

mla*_*bie 33 linux ubuntu filesystems permissions shell

有没有人有一个工具或脚本可以递归地纠正目录上的文件权限?

在一台 Ubuntu Linux 机器上,一堆文件被错误地复制到一个具有完整 777 权限(用户、组、其他 - 读取、写入、执行)的 USB 磁盘。我想将它们放回已更正的用户目录中。

目录应该是775,所有其他文件可以是664。所有文件都是图像、文档或MP3,所以它们都不需要可执行。如果设置了目录位,则它需要执行,否则它只需要用户和组,读取和写入。

我认为在编写 shell 脚本之前检查是否存在这样的实用程序是值得的:)

fre*_*eit 67

这应该可以解决问题:

find /home/user -type d -print0 | xargs -0 chmod 0775
find /home/user -type f -print0 | xargs -0 chmod 0664
Run Code Online (Sandbox Code Playgroud)

  • +1 用于使用 -print0/xargs -0 :-)。 (2认同)

Tho*_*enS 18

find 可以单独使用 -exec 来解决这个问题:

find /home/user -type f -exec chmod 0664 {} \;
find /home/user -type d -exec chmod 0775 {} \;
Run Code Online (Sandbox Code Playgroud)

防止 find 为每个条目生成一个 chmod:

find /home/user -type f -exec chmod 0664 {} +
find /home/user -type d -exec chmod 0775 {} +
Run Code Online (Sandbox Code Playgroud)

(这有效地使用所有文件的列表作为参数调用 chmod 一次,而不是每个文件一个 chmod)

  • 比使用 xargs 慢,因为您要为每个文件分叉一个 chmod,而 xargs 将运行一个 chmod 进程,其中包含尽可能多的文件在命令行中。在非常大的树上,这可以产生很大的不同。 (7认同)

Dav*_*ley 8

此答案不会解决您的问题,但有人可能会发现它对于文件权限低于应有的权限的类似问题很有用。

# chmod -R . u=rwX,g=rX,o=rX
Run Code Online (Sandbox Code Playgroud)

神奇的是 X 权限,而不是 x。chmod 联机帮助页这样描述它:

仅当文件是目录或已对某些用户具有执行权限时才执行/搜索

这不适合您的情况,因为您的文件具有执行权限,因此将匹配第二个测试。