为什么我不能像以前那样修改这些文件?


3

我试图为文件夹中的sh文件添加执行权限。为此,我错误地使用了:

find . -print0 -iname '*.sh' | xargs -0 chmod -v 744

输出为:

mode of `.' changed from 0755 (rwxr-xr-x) to 0744 (rwxr--r--)
mode of `./codis.sh' changed from 0644 (rw-r--r--) to 0744 (rwxr--r--)
mode of `./ne fil.sw' changed from 0644 (rw-r--r--) to 0744 (rwxr--r--)
mode of `./.whois1.sh.swo' changed from 0644 (rw-r--r--) to 0744 (rwxr--r--)
mode of `./new file' changed from 0644 (rw-r--r--) to 0744 (rwxr--r--)
mode of `./ezik.sh' changed from 0644 (rw-r--r--) to 0744 (rwxr--r--)
mode of `./.whois1.sh.swp' changed from 0600 (rw-------) to 0744 (rwxr--r--)
mode of `./whois1.sh' retained as 0744 (rwxr--r--)

我现在知道查找部分的正确用法是

find . -iname '*.sh' -print0

因此,我创建了另一个发现,如下所示:

find . \! -iname '*.sh' -print0 | xargs -0 chmod 600

这样我就可以取消对非sh文件的权限(是的,我看到有些文件具有644个权限,而不是600个权限,但是现在已经不重要了)。该命令的输出为:

chmod: cannot access `./ne fil.sw': Permission denied
chmod: cannot access `./.whois1.sh.swo': Permission denied
chmod: cannot access `./new file': Permission denied
chmod: cannot access `./.whois1.sh.swp': Permission denied

我也用过,sudo但什么都没有...

我看到我对权限的理解不正确...如果我正确理解,我也需要x目录的权限direc才能在所述目录中执行命令。


您是当前目录的所有者吗?
cuonglm

在更改权限的命令和拒绝输出权限的命令之间,我没有运行任何更改权限的命令。对于我正在其中工作的目录,权限为:drw------- 2 joee joee 4096 Jun 24 02:06 scripts; 我以joee的身份打开终端并尝试了sudo
user293496 2014年

Answers:


2

您的findcmd还会找到当前目录“ .”。然后,此目录的权限将设置为600,因此您将失去触摸该目录中文件的权限。

因此cd ..chmod 700说一个目录,然后运行您的还原操作find,该操作现在不包括当前目录,如下所示:

find . \! -path . \! -iname '*.sh' -print0 | xargs -0 chmod 600

1
好吧,这是有道理的……就像您说的那样,我只是注意到 结果中也find . \! -iname '*.sh' 包含“ .” ...
user293496 2014年

不要忘记关闭您的问题,这样它们就不会出现在unanswered:) 部分中。
polym

1
至少在GNU世界中,这也可以使用-mindepth 1
Hauke Laging

1
忘记添加\ !,请立即尝试:)
polym

1
是的,现在可以使用。mindepth 1参数也适用。感谢大家
user293496 2014年
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.