Изменить права доступа к файлам и каталогам, исключая один каталог
Я пытаюсь изменить права доступа к файлам и каталогам, за исключением одного каталога. Что у меня есть:
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 {} +
Объяснение:
-name test -prune
:-prune
, если тесты перед этим верны, а текущий файл является каталогом, пропустите его, иначе верните false.-o -type d -exec chmod 700 {} \;
: если-prune
возвращает false, тогда эти параметры применяются (как-o
ИЛИ), и это относитсяchmod 700
если файл является каталогом.-o -type f -execdir chmod 600 {} +
: если оба вышеуказанных теста возвращают false, то применяютсяchmod 600
как это не каталог.execdir
это "гораздо более безопасный метод для вызова команд", согласно man-странице, которая также приводит причины.