gaa*_*kam 71 permissions executable recursive
我备份到 NTFS 驱动器,嗯,这个备份确实被证明是必要的。但是,NTFS 驱动器弄乱了权限。我想将它们恢复到正常状态,而无需手动修复每个文件。
一个问题是突然我所有的文本文件都获得了执行权限,这是错误的。所以我试过:
sudo chmod -R a-x folder\ with\ restored\ backup/
Run Code Online (Sandbox Code Playgroud)
但这是错误的,因为它也x
从目录中删除了权限,这使得它们不可读。
在这种情况下,正确的命令是什么?
小智 94
如果您可以为所有文件夹上的每个人设置执行权限:
chmod -R -x+X *
Run Code Online (Sandbox Code Playgroud)
在-x
移除了执行所有权限
的+X
将增加执行的所有权限,但只对目录。
请参阅下面的解决方案,该解决方案find
用于真正不按要求触摸文件夹。
Edw*_*alk 18
好的,我重新阅读了 Mac OS X、BSD 和 Linux 的“chmod”手册页,并做了一些实验。这是我对符号模式的了解。它可能会变得复杂,但值得理解:
因此,例如,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
Run Code Online (Sandbox Code Playgroud)
观察目录和“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
Run Code Online (Sandbox Code Playgroud)
我有同样的结果执行chmod -x+X
。
结论:Jak Gibb 的解决方案适用于 Linux,但对于 BSD,您需要通过两次。
我没有在 SVr4 或其他 Unix 变体上测试这个。
Sat*_*ura 13
一种方法:
find backup -type f -exec chmod 0644 {} +
Run Code Online (Sandbox Code Playgroud)
Sté*_*las 10
find backup ! -type l ! -type d -exec chmod a-x {} +
Run Code Online (Sandbox Code Playgroud)
将删除对目录类型(如您所要求的)和符号链接(符号链接通常总是 rwxrwxrwx,并且chmod
会影响符号链接的目标)的文件的执行权限。
注意:
find backup -type f -exec chmod a-x {} +
Run Code Online (Sandbox Code Playgroud)
只会更改常规文件的权限。这将排除目录和符号链接,但也排除设备、命名管道、套接字和其他可能取决于系统的内容(尽管在 OP 备份 NTFS 文件系统的情况下,这些不太可能存在)。