почему это не работает Я пытаюсь изменить все файлы на 644 abd all -d на 755:
find . -type f -exec chmod 644 {} ;
я получаю: find: отсутствует аргумент для `-exec' спасибо
почему это не работает Я пытаюсь изменить все файлы на 644 abd all -d на 755:
find . -type f -exec chmod 644 {} ;
я получаю: find: отсутствует аргумент для `-exec' спасибо
Передача в xargs — это грязный способ сделать то, что можно сделать внутри find.
find . -type d -exec chmod 0755 {} \;
find . -type f -exec chmod 0644 {} \;
Вы можете еще больше контролировать с помощью других опций, таких как:
find . -type d -user harry -exec chown daisy {} \;
Вы можете делать очень классные вещи с find, а можете делать и очень опасные вещи. Взгляните на «найти человека», это длинно, но стоит быстро прочитать. И, как всегда, помните:
find . -type f -exec chmod 0644 {} +, который работает практически так же, как метод xargs, создавая одну командную строку. (\ выше предназначен только для выхода из точки с запятой.)
- person johnthacker; 02.08.2016
find . -type d -exec chmod 0755 {} \; && find . -type f -exec chmod 0644 {} \;
- person lucaferrario; 29.12.2017
Хорошая альтернатива:
find . -type f | xargs chmod -v 644
и для каталогов:
find . -type d | xargs chmod -v 755
и, чтобы быть более явным:
find . -type f | xargs -I{} chmod -v 644 {}
-print0, чтобы найти и xargs -0.
- person user88595; 30.03.2016
Мне это нужно так часто, что я создал функцию в своем ~/.bashrc файле:
chmodf() {
find $2 -type f -exec chmod $1 {} \;
}
chmodd() {
find $2 -type d -exec chmod $1 {} \;
}
Теперь я могу использовать эти ярлыки:
chmodd 0775 .
chmodf 0664 .
\;, а не только с;. - person Michael Berkowski   schedule 02.11.2013-exec, рассматривается как его аргумент. Если бы у вас был голый;, он рассматривался бы как терминатор для всегоfind, но на самом деле вам нужно завершитьexec, поэтому он должен быть экранирован как часть строки аргумента. - person Michael Berkowski   schedule 02.11.2013