У меня есть сценарий установки, который unzip
s каталог, затем рекурсивно chmod
s его содержимое.
Я удивлен, что для выполнения двух следующих команд требуется почти в 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
Чтобы измерить время, затраченное на выполнение различных команд.