Смена владельца файлов рекурсивно, но не каталогов

14

У меня есть каталог с ~ 50 тыс. Каталогов и ~ 1 млн. Файлов.

Я хочу изменить владельца (или разрешения) всех файлов, но не каталогов. Это потому, что я пытаюсь SCP дополнительные файлы с удаленного сервера (~ 150 тыс. Каталогов и ~ 3,6 млн файлов).

Каталог, который у меня есть, является частью удаленного каталога, но scp не удалось ...

Если я снова запускаю SCP, он начнется заново, перезаписав файлы, которые я уже скопировал из удаленного каталога.

Маркус Брунстен
источник

Ответы:

20

Вы можете использовать find, это имеет дополнительное преимущество, что ARG_MAXне будет запущен в процессе. Из родительского каталога:

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

Для chmod:

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

-type fбудут findтолько файлы.

heemayl
источник
1
Работает действительно здорово! Благодарность! +1 для chmod и chown
Маркус Брунстен
2
Так findне срабатывает ARG_MAX? Я всегда думал, что так и будет. Вы всегда чему-то учитесь :)
kos
5

Другой альтернативой является использование xargs. Вам нужно будет использовать -print0опцию с findи соответствующую -0опцию xargs:

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

От man find:

-print0

Напечатайте полное имя файла на стандартном выводе с последующим нулевым символом . Это позволяет правильно интерпретировать имена файлов, содержащие символы новой строки или другие типы пробелов , программами, обрабатывающими результаты поиска. Эта опция соответствует опции -0 в xargs.

xargsтакже будет правильно обрабатывать ARG_MAX.

AP
источник
2
find..execобрабатывает странные имена файлов .. что заставляет вас думать, что нет?
Heemayl
1
@heemayl Я провел несколько тестов, и, похоже, ты прав. Я стою исправлено. Спасибо за указание, я обновил свой ответ.
AP