Jak chmodować i chown ukryte pliki w Linuksie?

30

Jak wykonać rekursywnie chmod lub chown dla ukrytych plików?

sudo chmod -R 775 * nie działa na ukrytych plikach.

To samo dotyczy sudo chown -R user:group.

nothing-special-here
źródło

Odpowiedzi:

33

Jeśli jesteś w porządku, chmoduj bieżący katalog, zrób to i pozwól -R zrób ciężkie podnoszenie. -R nie ignoruje ukrytych plików.

sudo chmod -R 775 .
John Kugelman
źródło
14
To ( * .* ) nie jest najbezpieczniejszym sposobem na to. W szczególności będzie rekurencyjny do katalogu nadrzędnego, co oznacza chmod s także rodzeństwo bieżącego katalogu. Właściwy byłby sposób * ..?* .[^.]* lub nawet lepiej (biorąc pod uwagę, że symbole wieloznaczne mogą nie pasować do żadnych plików) $(ls -A).
jpalecek
1
@jpalecek: Wyjście z ls jest nie do przyjęcia; próbując go przeanalizować, prosi o kłopoty. Właściwym podejściem jest użycie globulacji powłoki.
Scott Severance
Chociaż w Linuksie masz możliwość zmiany kolejności argumentów dla chmod, podczas wykonywania skryptów x-plat pomiędzy Linuksem a OS X, jest to kolejność, której powinieneś użyć, np. sudo chmod 775 -R pójdzie do góry, więc trzymaj się tej odpowiedzi.
kayleeFrye_onDeck
33

* domyślnie nie zawiera ukrytych plików, ale jeśli jesteś w bashu, możesz to zrobić za pomocą:

shopt -s dotglob

Przeczytaj więcej na ten temat w bash builtin podręcznik :

Jeśli jest ustawiony, Bash zawiera nazwy plików zaczynające się od `. ' w wyniku rozszerzenia nazwy pliku.

To sprawi * także ukryte pliki.

chmod -R 775 *

Wyłącz go za pomocą:

shopt -u dotglob
slhck
źródło
2
Jak to zrobić w zsh ?
nothing-special-here
2
Używasz (D) kwalifikator globowania, np. chmod -R 775 *(D)
slhck
2

Inną opcją jest użycie find podoba mi się, ponieważ możesz mieć nad nią bardzo drobną kontrolę.

find <path to start from> -exec chown <options> {} \+

find -path '<path to include>' -exec chown <options> {} \+

Jedynym minusem jest to find ma inną składnię w różnych wersjach.

RedX
źródło
1

Wszystkie pliki w bieżącym katalogu, rekurencyjnie, w tym ukryte pliki:

chmod 755 -R ./* ./.[!.]*

Wszystkie pliki w bieżącym katalogu, nie rekurencyjnie, w tym ukryte pliki:

chmod 755 ./* ./.[!.]*

Nie zmieni to nazwy pliku wyjątku, począwszy od 2 kropek, na przykład, "./..thisonescapesunharmed.txt"

Uważaj też, aby nie usunąć bitu „x”, bo inaczej wszystkie twoje katalogi nie będą dostępne (potrzebny jest bit x, aby przejść do katalogu).

Zapamiętaj ten alert: nigdy nie używaj goły * ale ./* zamiast.

Aby uniknąć problemów z ustawieniem uprawnień do katalogów, użyj find zamiast.

find . -type f -exec chmod `VALUE` {} \;
Dr Beco
źródło