Может ли кто-нибудь указать мне код или руководство по написанию скрипта оболочки, который может рекурсивно проходить по всей структуре каталогов (начиная с текущего рабочего каталога или при наличии требуемого аргумента, указывающего, с чего начать) и может:
- Определите, является ли элемент каталогом, и если да,
chmod 755
то он или... - Определите, является ли элемент файлом (не каталогом), и
chmod 644
его.
Я ищу совместимость с Ubuntu, Debian, RHEL-Based и т. д., поэтому я не помечаю это каким-либо конкретным языком. Я бы хотел это в Bash, но если у вас есть скрипт ZSH, это тоже сработает.
решение1
Я привык к этой однострочной команде (будет выполняться рекурсия, начиная с текущего рабочего каталога)
find . -type d -exec chmod 0755 '{}' + -or -type f -exec chmod 0644 '{}' +
Объяснение:
find . # starting in curdir find
-type d # any directory
-exec chmod 0755 '{}' # and chmod it to 755
+ # (variant of -exec look find man page)
-or # or
-type f # any file
-exec chmod 0644 '{}' # and chmod it to 644
+ # (as above)
решение2
Простой ответ:
chmod -R a+rX .
+X
(обратите внимание на заглавную букву X) означает дать разрешение на выполнение, если разрешение на выполнение уже было у какого-то пользователя. Если у вас есть дерево каталогов с нужными разрешениями для владельца, и вы хотите сделать его доступным для всех, это правильная команда. Она делает не только каталоги исполняемыми для всего мира, но и исполняемые файлы.
Если вы также хотите сбросить права записи только для владельца и очистить все биты setuid/setgid, сделайте это
chmod -R a-ws,u+w,a+rX .
Обязательная двухстрочник zsh, если вы не хотите делать какой-либо файл исполняемым:
chmod 755 **/*(/)
chmod 644 **/*(.)