Bash脚本:递归更改文件权限

时间:2017-05-23 07:52:41

标签: bash recursion file-permissions

我需要一个Bash脚本来更改目录和所有子目录中所有文件的文件权限。它的行为应该是这样的:

for each file in directory (and subdirectories)
   if i am the owner of the file
      if it is a directory
         chmod 770 file
      else
         chmod 660 file

我认为这不是一项艰巨的任务,但我对Bash脚本不是很有经验。非常感谢您的帮助! :d

3 个答案:

答案 0 :(得分:2)

您可以通过两次find命令调用,-user选项按用户过滤,-type选项按文件类型过滤来执行此操作:

find . -user "$USER" -type d -exec echo chmod 770 {} +
find . -user "$USER" -not -type d -exec echo chmod 660 {} +

测试后删除echo,以实际更改权限。

答案 1 :(得分:1)

find在这里很有用:它以递归方式查找符合特定条件的文件和/或目录(在本例中为所有者)。另一个技巧是为X使用x(而不是chmod)标志,这使得目录可执行但不是常规文件。通过xargs

将它们组合在一起
find . -user $(whoami) | xargs chmod ug=Xo=

我没有对此进行测试,这可能有点不对劲。我建议先测试一下:)

答案 2 :(得分:1)

使用find

find topdirectory -user "$USER" \( -type f -exec chmod 660 {} + \) -o \( -type f -exec chmod 770 {} + \)