[Источник] (1) показывает, что chmod(1)
всегда пытается установить режим
а затем снова проверяет с помощью [fstatat(2)] (2).
Файлы обрабатываются через [fts(3)] (3), который должен "статистизировать" все пройденные объекты файловой системы заранее, чтобы построить свое дерево данных.
В Unixlore есть [хорошая статья] (4), где chmod(1)
указано время
против подхода find
/ xargs
: последний выигрывает по величине.
Здесь командная строка адаптирована к первоначальному вопросу:
find . -print0 | xargs -0 chmod 775
Две причины:
Обход файловой системы отделен от операций с файлами через канал между двумя процессами, который может даже работать на разные ядра.
fts(3)
операция сведена к минимуму, потому что xargs(1)
"сглаживает"
дерево каталогов. Итак, да: вам определенно следует использовать find
/ xargs
. для простого
решение.
Другие варианты:
Играть с [umask] (5) и исходным кодом процесса(ов) записи новые файлы.
Если вы используете Linux, скорее всего, в вашей системе
inotify
подсистема ядра. В этом случае вы можете написать сценарий
эффективное решение через [inotifywait(1)] (6).
Примечание: если вам не нужны разрешения на выполнение ваших файлов, я бы предлагаю изменить вызов следующим образом:
find . -type f -print0 | xargs -0 chmod 664
find . -type d -print0 | xargs -0 chmod 775
Примечание для редакторов: мне не разрешено добавлять более двух ссылок в пост, а также комментировать другие посты. Я оставляю URL-адреса здесь и надеюсь, что какой-нибудь добросердечный пользователь с достаточной репутацией вернет их в текст и удалит этот абзац.
Прокомментируйте заполнение кэша диска с помощью find . -printf ""
:
Это может ускорить выполнение следующих операций chmod
, однако зависит от доступной памяти и загрузки ввода-вывода. Так что может получится, а может и нет. Операция обхода развязки (find
) и chmod
уже обеспечивает кэширование, поэтому заполнение кэша может быть излишним.