[英]How to modify bash command to change permissions
我有此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 {} \;
它表明:如果file是目录并且名称为ProductA
,则不要进入( -prune
),否则( -o
表示or)如果file是目录,则在其上执行chmod 755
。
find
表达式由选项,测试(可以为false或true)和操作组成,并由运算符分隔。 如果未给出任何操作,则对表达式为true的所有文件执行-print
操作。 -exec
是一个动作, -prune
是另一个动作。 您可以使用-a
和-o
链接多个动作。 expr1 -a expr2
将执行这两个动作,而expr1 -o expr2
expr2
仅在expr1
计算为false时才执行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
您可以尝试以下方法:
find . -type d \\(-name "*" ! -name "A" ! -name "B" \\) -exec chmod 755 {}\\;
find . -type d \\(-name "*"
find . -type d \\(-name "*"
-列出当前目录中的所有目录
!-name "A" !-name "B"
-name !-name "A" !-name "B"
-忽略名称为A和B的目录
您可以使用egrep -v
排除多个目录,例如dirname1, dirname2
,然后使用xargs
执行chmod
。
find . -type d | egrep -v "(dirname1|dirname2)" | xargs chmod 755
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.