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

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

У меня есть каталог, содержащий ~50 тыс. каталогов и ~1 млн файлов.

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

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

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

решение1

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

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

Для chmod:

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

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

решение2

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

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

От man find:

-печать0

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

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

Связанный контент