Назад | Перейти на главную страницу

Сделайте рекурсивный chmod быстрее

У меня есть сценарий установки, который unzips каталог, затем рекурсивно chmods его содержимое.

Я удивлен, что для выполнения двух следующих команд требуется почти в 10 раз больше времени, чем на распаковку:

find $dir -type f -exec chmod a+r "{}" \;
find $dir -type d -exec chmod a+rx "{}" \;

Я что-то делаю не так, есть ли более быстрый способ изменить chmod всех файлов и каталогов?

Вы можете избавиться от find команды с помощью chmod X флаг:

execute/search only if the file is a directory or already has execute permission for some user (X)

Это позволяет вам установить одинаковые разрешения для файлов и каталогов, при этом каталоги дополнительно являются исполняемыми, с помощью одной команды:

$ chmod -R a+rX $dir

Вы можете сделать следующее (при условии Linux):

cd $dir
chmod -R a+r .
find . -type d -print0 | xargs -0 chmod a+x

Это должно быть намного быстрее, чем комбинация двух команд, которые вы указали в своем вопросе.

Использовать tar вместо. В частности, с -p, --preserve-permissions, --same-permissions флаг.
Вы не можете напрямую его застегнуть, но -z, --gzip, -j, --bzip2 или -J, --xz должно работать достаточно хорошо. Если вам действительно нужен zip, это всего лишь | прочь.

Учитывая вашу команду, я думаю, вы проводите время в ожидании find not chmod.

Пытаться:

chmod -R a+r $dir

"-R" означает рекурсивный

Когда вы запускаете unzip и другие команды, перед ними ставится

time

Чтобы измерить время, затраченное на выполнение различных команд.