我需要使用chmod将所有文件递归更改为664。我想跳过这些文件夹。我当时想做这样的事情
ls -lR | grep ^-r | chmod 664
我认为这是行不通的,因为我无法通过管道插入chmod有人知道这样做的简单方法吗?
谢谢
Answers:
一个find -exec
答案是一个很好的答案,但它通常具有不相关的缺点,即为每个文件创建一个单独的子过程。然而,它的完美的功能,只会表现不佳时,文件的数量变得真大。使用xargs
意愿批了文件名到大集团运行的子过程,以前组文件。
您只需要注意使用 xargs
,您必须正确处理带有嵌入式空格,换行符或其他特殊字符的文件名。
解决这两个问题的解决方案是(假设您有足够的体面find
和xargs
实现):
find . -type f -print0 | xargs -0 chmod 644
该-print0
原因find
终止与NUL字符(而不是空间)的输出流的文件名和-0
要xargs
让它知道它应该想到,作为输入格式。
chmod
,这不是一个问题。xargs
明智地分批处理。
xargs
已经对文件进行了批处理,因此它们不会超过参数长度限制。这些-n/-L
选项仅允许对批处理大小进行进一步的任意限制。
我简洁的两分钱...
Linux:
$ chmod 644 `find -type f`
OSX:
$ chmod 644 `find . -type f`
这可以递归方式更改当前目录及其所有子目录中包含的所有文件。如果要定位到其他目录,请.
使用正确的路径替换:
$ chmod 644 `find /home/my/special/folder -type f`
“找到。-type f -print | xargs chmod 444”应该工作,不是吗?如果不是,请查找。-print> myfile.sh和vi myfile.sh删除目录(它们不应太多),然后依次删除1,$ s / ^ / chmod 444 /和sh myfile.sh。