Вот скрипт, который вы можете вызвать, передав режим в качестве первого аргумента и одно или несколько имен каталогов в качестве последующих аргументов. В Linux, если вы не передадите имя каталога, оно будет таким, как если бы вы его передали .
(текущий каталог). Назовите этот скрипт rchmodf
, сделайте его исполняемым ( chmod a+rx /path/to/rchmodf
) и поместите его где-нибудь на свой $PATH
.
#!/bin/sh
mode=$1; shift
find "$@" -type f -exec chmod "$mode" {} +
Пояснения: mode=$1; shift
устанавливает переменную mode
в первый аргумент скрипта и удаляет этот первый аргумент из списка. "$@"
расширяется до списка всех аргументов.
Если хотите, вы можете создать скрипт, который принимает как режим каталога, так и режим файлов.
#!/bin/sh
dir_mode=$1; shift
file_mode=$1; shift
find "$@" -type d -exec chmod "$dir_mode" {} + -o -type f -exec chmod "$file_mode" {} +
Обратите внимание, что 744 не является полезным режимом файла; 644 (доступный для записи и читаемый всем) и 755 (также исполняемый во всем мире) встречаются гораздо чаще. Кроме того, изменение каждого файла в дереве, чтобы быть исполняемым или не быть исполняемым, редко полезно; Вы, вероятно, захотите вызвать этот сценарий с аргументами вроде +rX
(прописные X
, чтобы установить исполняемый бит только для каталогов и для файлов, которые уже исполняются). В самом деле, X
символьный режим, вероятно , что вы были после того, как с этими скриптами: chmod -R +rX .
.
С bash или zsh есть другой способ рекурсивного действия, но только для каталогов. Для bash вам нужна версия 4 и запускать shopt -s globstar
первым.
chmod a+rx **/*/
В Zsh, вы можете действовать на файлы только суффиксов (.)
: chmod a+r **/*(.)
.
Я передам вопрос о Наутилусе.