Изменить права доступа к файлам и каталогам, исключая один каталог

Я пытаюсь изменить права доступа к файлам и каталогам, за исключением одного каталога. Что у меня есть:

find ! -name test -exec chmod -R 700 {} \;

проверить каталог, который мне нужно исключить, в то время как для других файлов и каталогов должно быть 700 разрешений доступа.

1 ответ

Чтобы игнорировать каталог, вы должны использовать -prune, Рассмотрим что-то вроде этого:

find . -name test -prune -o -type d -exec chmod 700 {} \; -o -type f -execdir chmod 600 {} +

Объяснение:

  1. -name test -prune: -prune, если тесты перед этим верны, а текущий файл является каталогом, пропустите его, иначе верните false.
  2. -o -type d -exec chmod 700 {} \;: если -prune возвращает false, тогда эти параметры применяются (как -o ИЛИ), и это относится chmod 700 если файл является каталогом.
  3. -o -type f -execdir chmod 600 {} +: если оба вышеуказанных теста возвращают false, то применяются chmod 600 как это не каталог. execdir это "гораздо более безопасный метод для вызова команд", согласно man-странице, которая также приводит причины.
Другие вопросы по тегам