Supponendo che desideri impostare il bit di autorizzazione 755 in modo ricorsivo per il contenuto delle cartelle nella tua directory di lavoro corrente, a parte il contenuto della cartella chiamata "nameOfFolderToBeExcluded" :
chmod 755 -R $(ls | awk '{if($1 != "nameOfFolderToBeExcluded"){ print $1 }}')
Puoi usare find
per cercare tutti i file che non corrispondono al nome file specificato e exec
un comando su tutti i file trovati come:
Supponendo che tu debba escludere la directory test
e concedere i permessi sui file 755 a tutti gli altri file e directory. Questo verrebbe eseguito dalla cima dell'albero.
find ! -name test -exec chmod 755 {} \;
Testato
[email protected]:$ touch a1.txt a2.txt a3.txt test
[email protected]:$ 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
[email protected]:$ find ! -name test -exec chmod 777 {} \;
[email protected]:$ 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*
[email protected]:$
I permessi del file per il file test
rimasto invariato. Lo stesso vale per le directory.
Quale guscio?
Se stai eseguendo bash (probabilmente se sei su Linux), puoi controllare extglob, che ti offre più opzioni per il globbing, incluso il "glob negativo" !()
shopt -s extglob
chmod 774 !(file-to-ignore)