有没有办法通过单个 Linux 命令行命令更改除单个目录之外的所有文件/目录的权限?
答案1
假设您希望递归地为当前工作目录中的文件夹内容设置权限位 755,除了名为“要排除的文件夹名称”:
chmod 755 -R $(ls | awk '{if($1 != "nameOfFolderToBeExcluded"){ print $1 }}')
答案2
您可以使用find
搜索与给定文件名不匹配的所有文件,并对exec
找到的所有此类文件执行命令:
假设您需要排除目录test
并向所有其他文件和目录授予文件权限 755。这将从树的顶部执行。
find ! -name test -exec chmod 755 {} \;
已测试
mtk@mtk4-laptop:$ touch a1.txt a2.txt a3.txt test
mtk@mtk4-laptop:$ ls -lrt
total 0
-rw-rw-r-- 1 mtk mtk 0 Sep 17 23:55 test
-rw-rw-r-- 1 mtk mtk 0 Sep 17 23:55 a3.txt
-rw-rw-r-- 1 mtk mtk 0 Sep 17 23:55 a2.txt
-rw-rw-r-- 1 mtk mtk 0 Sep 17 23:55 a1.txt
mtk@mtk4-laptop:$ find ! -name test -exec chmod 777 {} \;
mtk@mtk4-laptop:$ ls -lrt
total 0
-rw-rw-r-- 1 mtk mtk 0 Sep 17 23:55 test
-rwxrwxrwx 1 mtk mtk 0 Sep 17 23:55 a3.txt*
-rwxrwxrwx 1 mtk mtk 0 Sep 17 23:55 a2.txt*
-rwxrwxrwx 1 mtk mtk 0 Sep 17 23:55 a1.txt*
mtk@mtk4-laptop:$
文件的文件权限test
保持不变。目录也是如此。
答案3
什么壳?
如果你正在跑步狂欢(如果你使用的是 Linux),你可以查看 extglob,它为你提供了更多的通配符选项,包括“负通配符”!()
shopt -s extglob
chmod 774 !(file-to-ignore)
答案4
只需一个简单的命令就可以做到:-
chmod 755 /x/y/!(abc)
其中x/y/z
= 路径。
abc
= 要排除的文件夹/文件的名称