2011年2月28日星期一

Linux (Ubuntu)下递归去掉一个目录下所有文件(不包括子目录)的执行权限

Background:

从 Windows 拷贝到笔记本的 ubuntu 下的文件的操作把执行权限位置为了 755 (-rwxr-xr-x),估计是 samba 的问题,改配置应该可以解决以后的操作(当然现在也懒得去改),不过已经拷过来的文件就有点麻烦。

说来也不是大事,就是每逢要打开个 txt 文件或者是 html 之类的,Ubuntu 都要问一句:您是要执行啊,还是要打开? (没办法,windows 看扩展名,linux 看权限位,谁让这文件有执行权限呢?)

于是每次还得点一下:打开(执行个P呀,又不是脚本)。不胜其烦,于是 

chmod 644 -R .

... 不work?为什么,哦,原来这命令第一步就把当前的目录执行权限位置为了 644 (drw-r--r--),则本目录不能执行,那你也休想打开下面的子目录了(-R 参数哭了。。。)

嗯,怎么才能只置文件的权限位,不管目录呢?

Problem Statement: 

如何递归去掉一个目录下的所有文件(含子目录下的文件,但仅文件,不包括子目录)的执行权限(x)

Method:

find . -type f -print0 | xargs -0 chmod 644


Discussion:

不详细解释了,简要说明一下,find的结果作为输入,通过管道传给 xargs ,xargs 再调用 chmod,配合上面收到的参数运行 (find 保证了传过来的全是文件)

Conclusion:

Bingo! it works like a charm.

没有评论:

发表评论