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.

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 .

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

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.


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` {} \;
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.