如何修改bash命令以更改权限

时间:2013-08-19 15:45:46

标签: linux bash permissions

我有这个bash命令来修改根文件夹中的所有文件和文件夹权限:

find . -type d -exec chmod 755 {} \;
find . -type f -exec chmod 644 {} \;

它工作正常。 我该怎么做才能在根文件夹(执行bash的位置)中排除一些文件夹以获取更改权限。 例如,如果我想保留文件夹“A”和文件夹“B”的文件夹权限 提前致谢

3 个答案:

答案 0 :(得分:2)

使用-prune选项排除目录:

find . -type d -name ProductA -prune -o -type d -exec chmod 755 {} \;

它告诉:如果file是一个目录并且名称为ProductA,则不要进入它(-prune),否则(-o表示或)如果file是目录,然后在其上执行chmod 755

find表达式由选项,测试(可以是false或true)和操作组成,由运算符分隔。如果未执行任何操作,则对表达式为true的所有文件执行-print操作。 -exec是一项行动,-prune是另一项行动。您可以使用-a-o链接多个操作。 expr1 -a expr2将执行这两个操作,而expr1 -o expr2仅在expr2评估为false时执行expr1

因此,如果要排除多个目录,可以编写

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/dataProductA/images,那么你可以使用-path测试:

find . -path ./ProductA/src -prune -o -print

答案 1 :(得分:1)

你可以试试这个:

find . -type d \(-name "*" ! -name "A" ! -name "B" \) -exec chmod 755 {}\;

find . -type d \(-name "*" - 列出当前目录中的所有目录

!-name "A" !-name "B" - 忽略名称为A和B的目录

答案 2 :(得分:0)

您可以排除多个目录,例如dirname1, dirname2使用egrep -v,然后使用chmod执行xargs

find . -type d | egrep -v "(dirname1|dirname2)" | xargs chmod 755