有没有人有工具或脚本可以递归地更正目录上的文件权限?
在 Ubuntu Linux 机器上,一堆文件被错误地复制到具有完整 777 权限(用户、组、其他 - 读取、写入、执行)的 USB 磁盘。我想把它们放回更正的用户目录中。
目录应该是 775,所有其他文件可以是 664。所有文件都是图像、文档或 MP3,所以它们都不需要是可执行的。如果设置了目录位,则需要执行,否则只需要用户和组,读取和写入。
我认为在编写 shell 脚本之前检查是否存在这样的实用程序是值得的 :)
有没有人有工具或脚本可以递归地更正目录上的文件权限?
在 Ubuntu Linux 机器上,一堆文件被错误地复制到具有完整 777 权限(用户、组、其他 - 读取、写入、执行)的 USB 磁盘。我想把它们放回更正的用户目录中。
目录应该是 775,所有其他文件可以是 664。所有文件都是图像、文档或 MP3,所以它们都不需要是可执行的。如果设置了目录位,则需要执行,否则只需要用户和组,读取和写入。
我认为在编写 shell 脚本之前检查是否存在这样的实用程序是值得的 :)
这应该可以解决问题:
find 可以单独使用 -exec 来解决问题:
防止 find 为每个条目生成一个 chmod:
(这有效地调用 chmod 一次,将所有文件的列表作为参数,而不是每个文件一个 chmod)
此答案不会解决您的问题,但有人可能会发现它对于文件权限低于应有权限的类似问题很有用。
神奇的是 X 权限,而不是 x。chmod 手册页是这样描述的:
这不适合您的情况,因为您的文件具有执行权限,因此将匹配第二个测试。
前几天我做了一个非常简单的 bash 脚本,因为我需要修复权限。为什么没有正式的实用程序来重置基本、非根、文件和文件夹权限?
该脚本使用查找 755 个所有文件夹和 644 个库。然后它使用 readelf 测试每个文件以查看它是否具有二进制 elf 标头。如果不是,它会在前两个字符中扫描 shebang
#!
。在检查文件是否已经具有匹配权限之后,它会 755 和 644 其他所有实例。特殊情况会处理一个例外,例如
*.bak
要忽略的文件。如果您使用 ssh,最好不要修改
~/.ssh
权限。我根据 freiheit 的解决方案制作了一个脚本,它添加了基本的参数检查。
另一种不完全回答原始请求但更可能是 OP 意图的替代方法是象征性地指定权限。例如,我假设 OP 想要“删除公众的写访问权限,并从所有文件中删除可执行权限”。
如果您使用符号权限表示,这是可能的。
以这种方式写出来而不是显式设置“0664”,您可以避免意外地允许对以前锁定的文件的额外权限。例如,如果一个文件是 0770,它不会错误地变成 0664。
要完成第一个要求,您可以使用
chmod
:做第二个要求:
或者两者都做:
我使用这个脚本 https://github.com/TheKito/Scripts/blob/master/FixHomesDirectoryPermissions.sh
我找到了一个简化的 C-shell 解决方案。这可能不完全是万无一失的,但应该适用于大多数目录。它假定 Unix 'file' 命令有效,并找到 exec 文件以将它们重置为 exec 权限: