Mam strukturę katalogów z plikami i katalogami i lubię przypisywać uprawnienia, więc wszystkie pliki i katalogi mają uprawnienia do odczytu i zapisu dla użytkownika oraz uprawnienia do odczytu dla grupy, a także uprawnienia do wykonywania katalogu.
Chciałbym osiągnąć coś takiego:
$ ls -l
total 16
-rw-r----- 1 daniel daniel 0 5月 23 16:20 1
-rw-r----- 1 daniel daniel 0 5月 23 16:20 2
-rw-r----- 1 daniel daniel 0 5月 23 16:20 3
-rw-r----- 1 daniel daniel 0 5月 23 16:20 4
-rw-r----- 1 daniel daniel 0 5月 23 16:20 5
drwxr-x--- 2 daniel daniel 4096 5月 23 16:00 a
drwxr-x--- 2 daniel daniel 4096 5月 23 16:00 b
drwxr-x--- 2 daniel daniel 4096 5月 23 15:59 c
drwxr-x--- 2 daniel daniel 4096 5月 23 15:59 d
źródło
Jeśli chcesz to zrobić rekurencyjnie, tj. Do katalogów w katalogach w katalogach, użyj polecenia:
To lokalizuje wszystkie i tylko podkatalogi ( -type d flag) katalogu / ścieżka / do / start / katalogu, a następnie dokonuje wymaganej zmiany uprawnień do wykonania dla każdego z nich. Przestrzeń przed \; jest obowiązkowe.
źródło
Czy próbowałeś czegoś takiego:
chmod +x $(ls -p | grep /)
, dodaje to uprawnienie do wykonywania tylko katalogówa jeśli chcesz zezwolić na wykonanie plików i katalogów, po prostu wykonaj:
chmod +x *
i aby usunąć uprawnienia do wykonywania plików, spróbuj czegoś takiego:chmod -x *.*
Mam nadzieję, że to pomoże
źródło
*/
można go również użyć do dopasowania katalogów.ls
. Nie powiedzie się to nawet w najprostszych przypadkach, w których nazwy katalogów zawierają spacje.ls
?Spróbuj tego:
Wyjaśnienie
-mindepth 1
: To takiefind
przyzwyczajenie pasuje do bieżącego katalogu.
.-print0
: drukuje dane wyjściowe rozdzielone wartością zerową. To gwarantuje, że mamy do czynienia z plikami fi z nowymi liniami.while IFS=
: ustawienieIFS
pustego ciągu powoduje wyłączenie podziału słów. Niezbędny w przypadku nazw plików / katalogów z białymi znakami.read -r -d ''
: wczytuje każdy wiersz do,$file
ale-r
zapewnia, że nie traktujemy\
specjalnie (w przypadku, gdy niektóre są w twoich nazwach plików) i-d ''
ustawia separator na ciąg zerowy, abyśmyfind
poprawnie przeanalizowali dane wyjściowe i mogli poradzić sobie z nazwami plików zawierających nowe wiersze.if [ -d "$file" ]; then chmod 750 "$file";
: Jeśli$file
jest to katalog ([ -d "$file" ]
, ustaw jego uprawnienia nadrwxr-x---
.else chmod 640 "$file"; fi
: jeśli nie jest to katalog, ustaw je na-rw-r-----
.źródło
Wielkie litery
X
oznaczają, że jest ustawiony tylko wtedy, gdy jest już ustawiony gdzie indziej. Ponieważ wszystkie katalogi są już wykonywalne dla użytkownika, będą one również dostępne dla grup. Ponieważ pliki nie są wykonywalne dla użytkownika, nie zostaną one również wykonane dla grup.Korzystanie
chmod +X
będzie miało w przybliżeniu ten sam efekt, z tym wyjątkiem, że gdy daje uprawnienia do wykonywania, daje uprawnienia do wykonywania użytkownikowi, grupie i innym.źródło
Dziękuję za odpowiedzi. Odkryłem, że aby przypisać uprawnienia do wykonywania tylko do katalogów, konieczne jest użycie
X
pozwolenia na kapitał .Polecenie wyglądałoby zatem następująco:
http://www.manpagez.com/man/1/chmod/
(Znalezienie tego zajęło mi trochę czasu, więc chciałem się tym wszystkim podzielić. Teraz myślę, że to pytanie zostanie zaindeksowane w Google dla następnej osoby, która chce się dowiedzieć)
źródło