有没有人有一个工具或脚本,将recursion更正目录上的文件权限?
在Ubuntu Linux机器上,一堆文件被错误地复制到一个具有完整777权限(用户,组,其他 – 读,写,执行)的USB磁盘。 我想把它们放回用户的目录中。
目录应该是775,所有其他文件可以是664.所有的文件是图像,文件或MP3,所以他们都不需要是可执行的。 如果目录位被设置,那么它需要执行,否则它只需要用户和组,读写。
我认为这是值得检查,如果这样的实用工具之前一起hacking一个shell脚本:)
这应该做的伎俩:
find /home/user -type d -print0 | xargs -0 chmod 0775 find /home/user -type f -print0 | xargs -0 chmod 0664
find可以做的伎俩与-exec:
find /home/user -type f -exec chmod 0664 {} \; find /home/user -type d -exec chmod 0775 {} \;
防止为每个条目产生一个chmod:
find /home/user -type f -exec chmod 0664 {} + find /home/user -type d -exec chmod 0775 {} +
(这有效地调用一次chmod所有文件的列表作为参数,而不是每个文件一个chmod)
这个答案并不能解决你的问题,但有人可能会发现它对类似的问题很有用,因为文件的权限比他们应该做的要less。
# chmod -R . u=rwX,g=rX,o=rX
魔法是X的许可,而不是x。 chmod手册页描述如下:
仅当文件是目录或已经具有某个用户的执行权限时执行/search
这不适合你的情况,因为你的文件有执行权限,所以会匹配第二个testing。
我用freiheit的解决scheme做了一个脚本,它增加了基本的参数检查。
#!/bin/sh if [ $# -lt 1 ]; then echo "USAGE: $0 <path>" exit 1 fi find $1 -type d -print0 | xargs -0 chmod 0755 find $1 -type f -print0 | xargs -0 chmod 0644
如果你使用ssh,最好不要修改~/.ssh
权限。
DIR=/home/user find $DIR -type d -not -path "$DIR/.ssh" -print0 | xargs -0 chmod 0775 find $DIR -type f -not -path "$DIR/.ssh/*" -print0 | xargs -0 chmod 0664