linux - 如何修改bash命令来改变权限

标签 linux bash 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 {} \;

它告诉:如果文件是一个目录并且名称为 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/

相关文章:

docker : How to avoid Operation not permitted in Docker Container?

python - django crontab 作业不工作

linux - lxc - Linux容器无法访问设备节点

android - publish_actions 权限错误

asp.net - PostgreSQL 错误 42501 : Permission Denied for Schema

bash - 带参数执行

linux - 为什么Linux不需要驱动程序

c++ - 给定一个线程 id,如何在 linux 上的 C++ 中确定它是否存活

python - 使用 python subprocess.call 将 fasta 序列的计数写入文件

linux - 为什么在 bash 脚本中第二次使用 "$?"时赋值语句不起作用