我对 NTFS 驱动器进行了备份,事实证明这个备份确实是必要的。然而,NTFS 驱动器的权限混乱。我想将它们恢复到正常状态,无需手动修复每个文件。
一个问题是我的所有文本文件突然都获得了执行权限,这是错误的。所以我尝试:
sudo chmod -R a-x folder\ with\ restored\ backup/
但这是错误的,因为它x
也删除了目录的权限,这使得它们不可读。
在这种情况下正确的命令是什么?
答案1
如果您愿意为所有文件夹上的每个人设置执行权限:
chmod -R -x+X -- 'folder with restored backup'
删除-x
所有的执行权限
将为+X
所有添加执行权限,但是仅有的对于目录。
看斯特凡·查泽拉斯的回答根据要求,寻找一种真正不接触文件夹的解决方案find
。
答案2
好吧,我重新阅读了 Mac OS X、BSD 和 Linux 的“chmod”手册页,并做了一些实验。这是我对符号模式的了解。它可能会变得复杂,但值得理解:
- 一般形式是条款[,条款…] 在哪里:
- 条款:= [ugoa][+-=][rwxXstugo]
- [乌戈亚](WHO)(指定多个)表示为用户、组、其他或全部设置权限。如果未指定,则默认为“a”,但umask已生效。
- [+-=](行动)(指定一项)是指:
- + 表示将指定的权限添加到已经生效的权限中
- - 表示从已经生效的权限中删除指定的权限
- = 表示将权限设置为指定权限,清除所有其他权限
- [rwxXstugo](允许)(指定 rwxXst 的倍数或 ugo 之一)设置指定用户的权限,如下所示:
- r——读
- w——写
- x — 执行/搜索
- X — 执行/搜索当且仅当目录或任何执行位已设置。
- s — suid 或 sgid
- t—黏
- u — 复制用户权限
- g — 复制组权限
- o — 复制其他权限
例如,a+x
将使每个人都可执行文件。a+X
如果某个文件可以被任何人执行,那么它就可以被每个人执行。
a+x
将使每个人都可以搜索目录。a+X
还将创建一个每个人都可以搜索的目录。
BSD 和 Linux 之间的主要区别在于,BSD 是根据文件的权限做出决定的前chmod 被执行。而在 Linux 中,确定是在执行 +X 子句之前立即做出的。
因此,对于 BSD,该组合a-x,a+X
将删除执行/搜索权限,然后使每个人都可以搜索目录,并使每个人都可以执行文件如果它最初是任何人都可以执行的。
对于 Linux,a-x,a+X
将删除执行/搜索权限,然后使每个人都可以搜索目录,同时留下任何人都可执行的文件。
下面是一个具体的例子:在 BSD 机器上:一个目录、一个可执行文件和一个不可执行文件:
drwxr-x--- 2 falk staff 68 Jul 19 18:01 fee/
-rwxr-x--- 1 falk staff 0 Jul 19 18:01 fie*
-rw-r----- 1 falk staff 0 Jul 19 18:01 foe
请注意,目录和“fie”均可由用户执行/搜索,但其他人则不可执行/搜索。
现在我们执行chmod a-x,a+X *
.第一个子句将从所有用户的所有文件中删除执行/搜索位,但第二个子句将为“fee”和“fie”将其添加回来。 “fee”是因为它是一个目录,“fie”是因为它至少有一个可执行位开始。
drwxr-x--x 2 falk staff 68 Jul 19 18:01 fee/
-rwxr-x--x 1 falk staff 0 Jul 19 18:01 fie*
-rw-r----- 1 falk staff 0 Jul 19 18:01 foe
我执行时得到了相同的结果chmod -x+X
。
结论:Jak Gibb 的解决方案适用于 Linux,但对于 BSD,您需要进行两次传递。
我没有在 SVr4 或其他 Unix 变体上对此进行测试。
答案3
一种方法是:
find backup -type f -exec chmod 0644 {} +