Mam archiwum, które jest archiwizowane przez inną osobę i chcę automatycznie, po pobraniu, zmienić gałąź systemu plików w rozpakowanych plikach, aby uzyskać dostęp do odczytu. (Nie mogę zmienić sposobu tworzenia archiwum).
Przejrzałem ten wątek: chmod: Jak rekurencyjnie dodawać uprawnienia do wykonywania tylko do plików, które już mają uprawnienia do wykonywania, jak do niektórych innych, ale bez radości.
Początkowo katalogi zawierają wiele, ale wszystkie nieprawidłowe flagi, mogą wyglądać następująco:
drwx------
d---r-x---
drwxrwxr-x
dr--r-xr--
To tylko kilka, które do tej pory odkryłem, ale może być ich więcej.
find
błędy, gdy próbuje zajrzeć do katalogu bez x
uprawnień, a więc nie przekazuje go do chmod
. Do tej pory robiłem ręcznie zmienić uprawnienia do katalogu nadrzędnego, a następnie przejść do katalogów podrzędnych i zrobić to samo dla nich i tak dalej. Ale to dużo pracy rąk. Czy nie ma sposobu, aby to zrobić automatycznie?
Tj jak teraz to robię:
robić:
$ chmod -R +x
$ chmod -R +r
dopóki nie dostanę błędów
$ find -type f -exec chmod -x {} +
Ale musi być lepszy sposób.
Odpowiedzi:
Potrzebujesz dostępu do odczytu, oprócz dostępu do wykonania, aby wyświetlić katalog. Jeśli masz tylko dostęp do wykonania, możesz znaleźć nazwy wpisów w katalogu, ale nie ma innych informacji (nawet typów, więc nie wiesz, które wpisy są podkatalogami). To działa dla mnie:
źródło
+
buduje wiersz poleceń w inny sposób. Tak naprawdę nie byłem tego świadomy;\;
jest zwykłym sposobem, z jednym poleceniem na plik pasującym do wyszukiwania."{}"
zamiast tego{}
naprawić.Możesz użyć chmod z
X
literą trybu (wielkie X), aby ustawić flagę wykonywalną tylko dla katalogów.W poniższym przykładzie flaga wykonywalna jest wyczyszczona, a następnie rekurencyjnie ustawiona dla wszystkich katalogów:
Trochę wyjaśnienia:
chmod -x foo
- wyczyść flagę eXecutable dlafoo
chmod +x foo
- ustaw flagę eXecutable dlafoo
chmod go+x foo
- tak samo jak powyżej, ale ustaw flagę tylko dla grupy i innych użytkowników, nie dotykaj uprawnień użytkownika (właściciela)chmod go+X foo
- tak samo jak powyżej, ale dotyczy tylko katalogów, nie dotykaj plikówchmod -R go+X foo
- tak samo jak powyżej, ale zrób to Rekurencyjnie dla wszystkich podkatalogówfoo
źródło
Spróbuj zmienić wszystkie persymisje jednocześnie:
źródło
find -type f -exec chmod -x {} +
później.Aby wszystko zapisywać przez właściciela, przeczytaj / wykonaj przez grupę, a świat wykonalny:
Aby wszystko było szeroko otwarte:
źródło
chmod -R 0777 .
Dodawanie uprawnień wykonywalnych rekurencyjnie do wszystkich plików (nie folderów) w bieżącym folderze z
sh
rozszerzeniem:find . -name '*.sh' -type f | xargs chmod +x
* Zwróć uwagę na potok (
|
)źródło
Daj 0777 wszystkim plikom i katalogom, zaczynając od bieżącej ścieżki:
źródło