Czy możesz zmienić uprawnienia do wszystkich plików oprócz jednego katalogu w systemie Linux?


7

Czy istnieje sposób zmiany uprawnień do wszystkich plików / katalogów oprócz jednego katalogu w jednym poleceniu wiersza poleceń systemu Linux?


grep -v "directory to exclude"

Odpowiedzi:


5

Zakładając, że chcesz ustawić rekursywnie bit uprawnień 755 dla zawartości folderów w bieżącym katalogu roboczym, oprócz zawartości folderu o nazwie „nameOfFolderToBeExcluded” :

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

4

Możesz użyć finddo wyszukiwania wszystkich plików, które nie pasują do podanej nazwy pliku i execpolecenia dla wszystkich takich plików znalezionych jako:

Zakładając, że musisz wykluczyć katalog testi dać uprawnienia do plików 755 do wszystkich innych plików i katalogów. Zostanie to wykonane z góry drzewa.

find ! -name test -exec chmod 755 {} \;

Przetestowany

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:$ 

Uprawnienia do pliku testpozostały niezmienione. To samo dotyczy katalogów.


Wyklucza to tylko pliki o tej nazwie - nie foldery. Spróbuj mkdir test+ touch a1.txt a2.txt a3.txt, a następnie wykonaj polecenie.
Kraang Prime

2

Jaka skorupa?

Jeśli korzystasz z bash (prawdopodobnie na Linuksie), możesz sprawdzić extglob, który daje więcej opcji globowania, w tym „negatyw glob”!()

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

1

Używając findprostszego w ten sposób:

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

W moim przypadku było to:

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

W ten sposób rekursywnie zmieniłem grupę w folderze / danych / projekcie, z wyjątkiem rekursywnie wszystkich folderów „.svn”.


0

Jeszcze łatwiejszy sposób za pomocą podstawowych poleceń:

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

0

Korzystam z poniższego polecenia, da pliki 644 i katalog 755 wszystkim plikom i katalogom w obecnym katalogu roboczym, ale wykluczy katalog var, aby zapewnić uprawnienia.

find . -not -path "*/var*" -type f -exec chmod -c 0644 {} \; && find . -not -path "*/var*" -type d -exec chmod -c 0775 {} \;
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.