Zmień właściciela plików rekurencyjnie, ale nie katalogów


14

Mam katalog z katalogami ~ 50k i plikami ~ 1m.

Chcę zmienić właściciela (lub uprawnienia) wszystkich plików, ale nie katalogów. To dlatego, że próbuję SCP dodatkowe pliki ze zdalnego serwera (~ 150 000 katalogów i ~ 3,6 mln plików).

Katalog, który mam, jest częścią katalogu zdalnego, ale scp nie powiodło się ...

Jeśli ponownie uruchomię SCP, zacznie się od nowa, zastępując pliki, które już skopiowałem ze zdalnego katalogu.

Odpowiedzi:


20

Możesz użyć find, ma tę dodatkową zaletę, że ARG_MAXnie zostanie wyzwolony w procesie. Z katalogu nadrzędnego:

find . -type f -exec chown newowner {} +

Dla chmod:

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

-type fbędzie findtylko pliki.


1
Działa naprawdę świetnie! Dzięki! +1 dla chmod i chown
Marcus Brunsten

2
Więc findnie uruchamia się ARG_MAX? Zawsze myślałem, że tak będzie. Zawsze się czegoś uczysz :)
kosz

5

Inną alternatywą jest użycie xargs. Musisz użyć -print0opcji zi findodpowiadającej jej -0opcji xargs:

find . -type f -print0 | xargs -0 chown newuser:newgroup

Od man find:

-print0

wypisz pełną nazwę pliku na standardowym wyjściu, a następnie znak null . Dzięki temu nazwy plików zawierające znaki nowej linii lub inne białe znaki są poprawnie interpretowane przez programy przetwarzające dane wyjściowe wyszukiwania. Ta opcja odpowiada opcji -0 xargs.

xargsbędzie również poprawnie obsługiwać ARG_MAX.


2
find..execobsługuje dziwne nazwy plików ... co sprawia, że ​​myślisz, że nie?
heemayl

1
@ heemayl Przeprowadziłem kilka testów i wygląda na to, że masz rację. Poprawiono mnie. Dziękuję za zwrócenie uwagi, zaktualizowałem swoją odpowiedź.
AP
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.