pliki chmod tylko we wszystkich podkatalogach

54

Proszę, pomóżcie mi z chmod, mam następującą strukturę plików

-dir1
--file1
--file2
--dir1a
---file1a1
---file1a2
--dir1b
---file1b1
---file1b2

Jak przeskoczyć do wszystkich plików w katalogu dir1 i wszystkich podkatalogach? Tak więc wszystkie pliki będą miały uprawnienia 655, a wszystkie katalogi pozostaną bez zmian.

Dziękuję Ci

netic
źródło

Odpowiedzi:

108

Lepszy w użyciu

find . -type f -exec chmod 655 -- {} +

Inne proponowane rozwiązanie z @sagarchalise nie będzie działać, jeśli nazwy plików zawierają spacje lub zaczynają się od myślnika.

enzotib
źródło
16
Podobnie, aby przeskoczyć wszystkie katalogi, możesz find . -type d -exec chmod 755 {} +zmienić wszystkie katalogi na 755.
Kris Harper
2
Do czego służy +?
Brettski
3
@Brettski: +znak jest rozwijany finddo listy ścieżek plików (lub jej części, jeśli jest za długa).
enzotib
3
Do czego służy?
Orient
2
--Wskazuje koniec opcji wiersza poleceń. Zapobiega to interpretacji pliku rozpoczynającego się od myślnika jako opcji wiersza poleceń, tak jak w przypadku pliku --.
Tim Tisdall
8

Myślę, że wchodząc do środka dir1i

find . -type f | xargs chmod 655

da rade.

sagarchalizować
źródło
to też działa, ale otrzymałem ostrzeżenie z informacją „Brak takiego pliku lub katalogu”
netic
@manetic: zależy, jak powiedziano w mojej odpowiedzi, od nazw plików zawierających spacje.
enzotib
4
Dla kompletności, zmieniając go, aby znaleźć. -type f -print0 | xargs -0 chmod 655 naprawiłbym problem z przestrzenią, jak sądzę, chociaż odpowiedź @ enzotib jest bardziej zwięzła
matt freake
co powiedział Matt Freake
Sergiy Kolodyazhnyy