Я хочу установить разрешение 755 для всех файлов и подкаталогов в определенном каталоге, но я хочу выполнить chmod 755 только для тех компонентов, которые не имеют разрешения 755.
find /main_directory/ -exec chmod 755 {} \;
Если find
команда возвращает длинный список, это займет много времени. Я знаю, что могу использовать команду stat для проверки разрешения уровня файла Octal каждого компонента, а затем использовать if-else для переключения разрешения файла, но есть ли какой-либо однострочный подход, использующий find
и xargs
сначала проверяющий, какое разрешение имеет файл / каталог , а затем используйте, chmod
чтобы изменить его на 755, если он установлен на что-то другое.
command-line
find
chmod
Кумарджит Гош
источник
источник
u+rw,go+r,go-w,ugo+X
- обратите внимание на столицу.Ответы:
Если вы хотите изменить разрешения
755
как для файлов, так и для каталогов, использование не имеет реальной выгодыfind
(по крайней мере, с точки зрения производительности), и вы можете просто сделатьЕсли вы действительно хотите использовать,
find
чтобы избежать изменения разрешений для вещей, у которых уже есть755
разрешения (чтобы не обновлять их метку времени ctime), то вам также следует проверить текущие разрешения для каждого каталога и файла:Он
-exec ... {} +
соберет как можно больше путевых имен, которые пройдут! -perm 0755
тест, и выполнит ихchmod
все сразу.Обычно желательно изменить разрешения для файлов и каталогов отдельно, чтобы не все файлы были исполняемыми:
источник
+
вместо;
имеет большое значение здесь.Как
find
получил-exec ... +
синтаксис, нет особого смысла в использованииxargs
, но, как вы просите его:источник
-0
(в сочетании с-print0
поиском; который является расширением GNU) может быть довольно проблематичным с точки зрения безопасности, если потенциальный злоумышленник может создать имена файлов, которые содержат пробелы или другие специальные символы в них. Так что лучше придерживайся,-exec
когда сможешьxargs
(просто использовать-exec
), и если вы используете его, вы должны использовать-print0
/,-0
как говорит Матия.