題 你可以更改Linux以外的所有文件的權限嗎?


有沒有辦法在單個Linux命令行命令中更改除一個目錄之外的所有文件/目錄權限?


6
2017-09-17 18:00


起源


grep -v "directory to exclude"


答案:


假設您希望遞歸設置當前工作目錄中文件夾內容的權限位755,除了調用的文件夾的內容 “nameOfFolderToBeExcluded”

 chmod 755 -R $(ls | awk '{if($1 != "nameOfFolderToBeExcluded"){ print $1 }}')

4
2017-09-17 18:16





您可以使用 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 保持不變。同樣適用於目錄。


4
2017-09-17 18:23



這只是按名稱排除文件 - 而不是文件夾。嘗試 mkdir test + touch a1.txt a2.txt a3.txt,然後執行命令。 - Kraang Prime


什麼殼?

如果你在跑 慶典 (可能如果你在Linux上),你可以查看extglob,它為你提供了更多選項,包括“負面的全局” !()

shopt -s extglob
chmod 774 !(file-to-ignore)

2
2017-09-17 20:11





運用 find 更簡單地這樣:

find <from_where_to_change> -not -path "*/<excluded_dir_name>*" [-and -not -path "*/<another_excluded_dir_if_you_want>*"] -exec chown <user>[:<group>] {} \;

在我的情況下它是:

find /data/project -not -path "*/.svn*" -exec chown :www-data {} \;

這樣我遞歸地更改了文件夾/數據/項目上的組,除了所有文件夾“.svn”遞歸。


1
2017-07-24 10:33





使用基本命令更簡單的方法:

chmod 755 -R $(ls -A|grep -v 'directory_name_to_exclude/*')

0
2017-08-25 13:43





我使用下面的命令,它將文件644和目錄755提供給當前工作目錄中的所有文件和目錄,但將排除var目錄以提供權限。

find . -not -path "*/var*" -type f -exec chmod -c 0644 {} \; && find . -not -path "*/var*" -type d -exec chmod -c 0775 {} \;

0
2018-06-01 06:29