我有一个文件夹,其中有一些内容(三个文件和一个文件夹),如下所示:
-rwxr-xr-x 1 max max 14504 2011-05-31 16:55 main.css
-rwxr-xr-x 1 max max 2504 2011-05-31 16:55 reset.css
-rwxr-xr-x 1 max max 916 2011-05-31 16:55 scaffold.css
drwxrwxr-x 3 max max 4096 2011-05-31 16:55 ui-lightness
我想为所有这些文件添加组写入权限,并删除所有用户的可执行状态。我首先处理这些文件:
$ chmod g+w main.css reset.css scaffold.css
$ chmod a-x main.css reset.css scaffold.css
$ ls -l
total 28
-rw-rw-r-- 1 max max 14504 2011-05-31 16:55 main.css
-rw-rw-r-- 1 max max 2504 2011-05-31 16:55 reset.css
-rw-rw-r-- 1 max max 916 2011-05-31 16:55 scaffold.css
drwxrwxr-x 3 max max 4096 2011-05-31 16:55 ui-lightness
到目前为止一切顺利。现在,ui-lightness 文件夹已经有了组写入权限,所以我只想从其中删除 exe 状态以及其中的所有文件和子文件夹。
$ ls -l ui-lightness/
total 40
drwxrwxr-x 2 max max 4096 2011-05-31 16:55 images
-rwxrwxr-x 1 max max 34146 2011-05-31 16:55 jquery-ui-1.8.11.custom.css
$ chmod -R a-x ui-lightness/
chmod: cannot access `ui-lightness/jquery-ui-1.8.11.custom.css': Permission denied
chmod: cannot access `ui-lightness/images': Permission denied
$ ls -l ui-lightness/
ls: cannot access ui-lightness/jquery-ui-1.8.11.custom.css: Permission denied
ls: cannot access ui-lightness/images: Permission denied
total 0
d????????? ? ? ? ? ? images
-????????? ? ? ? ? ? jquery-ui-1.8.11.custom.css
$
我的第一反应是有点恐慌。但是,重新添加 x 状态就可以解决问题!
$ chmod -R a+x ui-lightness/
$ ls -l ui-lightness/
total 40
drwxrwxr-x 2 max max 4096 2011-05-31 16:55 images
-rwxrwxr-x 1 max max 34146 2011-05-31 16:55 jquery-ui-1.8.11.custom.css
有人能解释一下这是怎么回事吗?我该如何在不破坏一切的情况下删除可执行状态?如果相关的话,这是在 ubuntu 9.10 中。
欢呼吧,马克斯
答案1
递归 chmod 的第一个参数是目录本身。您删除了目录上的 x 位,使其不再可搜索(这就是 x 位对目录的作用)。然后 chmod 程序无法再在该目录内搜索,并且您会收到权限错误。请尝试以下操作。
chmod -R a-x ui-lightness/*
答案2
要仅删除文件的可执行状态,请使用:
$ chmod -R a-x+X ui-lightness/
该+X
选项定义(见man chmod
)为:
- 仅当文件是目录或某些用户已具有执行权限时才设置执行权限
因此,小写-x
选项首先从所有文件(当然还有目录)中删除可执行状态,然后大写+X
选项仅为目录将其设置回来。
它有一个小缺点:它将可执行状态设置为全部子目录,甚至那些在调用之前没有设置它的子目录chmod
。如果这不是你想要的,只需使用 Keith 的find
解决方案。