Рекрусивно змінюйте власника файлів, але не каталогів


14

У мене є каталог, який містить ~ 50k каталогів і ~ 1м файлів.

Я хочу змінити власника (або дозвіл) усіх файлів, але не каталогів. Це тому, що я намагаюся SCP додаткові файли з віддаленого сервера, (~ 150k каталогів і ~ 3.6m файлів).

У мене каталог є частиною віддаленого каталогу, але scp не вдався ...

Якщо я запустити SCP ще раз, він почнеться заново, перезаписавши файли, які я вже скопіював із віддаленого каталогу.

Відповіді:


20

Ви можете використовувати find, це має додаткову перевагу в тому, що ARG_MAXволя не буде запущена в процесі. З батьківського каталогу:

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

Для chmod:

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

-type fбуде findлише файли.


1
Працює дійсно чудово! Спасибі! +1 і для chmod, і для
чоуна

2
Так findне спрацьовує ARG_MAX? Я завжди думав, що це буде. Ви завжди щось дізнаєтесь :)
kos

5

Ще одна альтернатива - використання xargs. Вам потрібно буде скористатися -print0опцією з findта відповідною -0опцією xargs:

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

Від man find:

-принт0

надрукуйте повне ім'я файлу на стандартному виході з подальшим нульовим символом . Це дозволяє коректно інтерпретувати імена файлів, що містять нові рядки або інші види білого простору , програмами, які обробляють вихідний висновок. Цей варіант відповідає опції -0 xargs.

xargsтакож правильно впорається ARG_MAX.


2
find..execчи обробляє дивні назви файлів .. що змушує вас думати, що це не так?
heemayl

1
@heemayl Я провів кілька тестів і, здається, ти маєш рацію. Я стою виправлений. Дякую, що вказали на це, я оновив свою відповідь.
AP
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.