我有两个包含相同层次结构和文件的包(目录)。我需要将源包中每个项目的权限复制到位于目标包中的文件中。我不应该复制文件,只能复制权限。
是否可以使用shell脚本,或者我应该努力并编写应用程序来执行此操作?
答案 0 :(得分:2)
不是bash
,但是{X}可以在OS X中使用zsh
,因此您可以尝试以下操作(我使用%作为提示来指示您何时在zsh
; for>
是次要提示)
$ zsh
% for x in source/**/*; do
for> chmod $(stat -f "%p" $x) ${x/^source/dest}
for> done
% exit
$
for循环以递归方式迭代source
下的所有文件。 stat -f "%p" $x
输出源目录中文件的权限,以用作更改相应文件权限的命令的参数(即,在目标中将“source”替换为其名称中的“dest”) 。目录
(实际上,该循环也适用于bash
4,但您可能已经注意到,OS X仍附带bash
3.2。)
作为名为foo.zsh
的独立脚本:
#!/bin/zsh
for x in source/**/*; do
chmod $(stat -f "%p" $x) ${x/^source/dest}
done
$ chmod +x foo.zsh
$ ./foo.zsh
或只是
$ zsh foo.zsh