Скрипт оболочки для рекурсивного прохода по каталогу и chmodding на основе условий типа файла

Скрипт оболочки для рекурсивного прохода по каталогу и chmodding на основе условий типа файла

Может ли кто-нибудь указать мне код или руководство по написанию скрипта оболочки, который может рекурсивно проходить по всей структуре каталогов (начиная с текущего рабочего каталога или при наличии требуемого аргумента, указывающего, с чего начать) и может:

  1. Определите, является ли элемент каталогом, и если да, chmod 755то он или...
  2. Определите, является ли элемент файлом (не каталогом), и 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 **/*(.)

Связанный контент