我有这个 bash 命令来修改根文件夹内的所有文件和文件夹权限:
find . -type d -exec chmod 755 {} \;
find . -type f -exec chmod 644 {} \;
它工作正常。 我应该如何排除一些文件夹以更改根文件夹(执行 bash 的位置)内的权限。 例如,如果我想保留文件夹“A”和文件夹“B”的文件夹权限 提前致谢
最佳答案
使用 -prune
选项排除目录:
find . -type d -name ProductA -prune -o -type d -exec chmod 755 {} \;
它告诉:如果文件是一个目录并且名称为 ProductA
,则不要进入它 (-prune
),否则 (-o
表示或者)如果文件是目录,则在其上执行 chmod 755
。
find
表达式由选项、测试(可以为 false 或 true)和操作组成,由运算符分隔。如果没有给出任何操作,那么 -print
操作将对表达式为真的所有文件执行。 -exec
是一个 Action ,-prune
是另一个。您可以使用 -a
和 -o
链接多个操作。 expr1 -a expr2
将执行这两个操作,而 expr1 -o expr2
将仅在 expr1
的计算结果为时执行 expr2
错误。
所以如果要排除多个目录,可以这样写
find . -type d -name ProductA -prune -o -type d -name ProductC -prune -o -type d -exec chmod 755 {} \;
find . -type d -name ProductA -prune -o -type d -name ProductC -prune -o -type f -exec chmod 644 {} \;
或者只是:
find . -type d -name "Product[AC]" -prune -o -type d -exec chmod 755 {} \;
find . -type d -name "Product[AC]" -prune -o -type f -exec chmod 644 {} \;
你也可以组合它们:
find . -type d -name "Product[AC]" -prune -o -type d -exec chmod 755 {} \; -o -type f -exec chmod 644 {} \;
如果你有一个更复杂的目录结构,假设你想排除 ProductA/data
但不是 ProductB/data
也不是 ProductA/images
, 然后你可以使用 -path
测试:
find . -path ./ProductA/src -prune -o -print
关于linux - 如何修改bash命令来改变权限,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18317872/