Используйте предикат -exec
дляfind
:
find. -name '* *.html' -type f -exec chmod -v u+rw,go+r {} +
(здесь добавление разрешений rw-r--r--
только потому, что нет особого смысла добавлять разрешения на выполнение в html-файл, поскольку они обычно не предназначены для выполнения. Замените +
на =
на установите эти разрешения точно вместо , добавив эти биты к текущим разрешениям ).
Вы также можете добавить ! -perm -u=rw,go=r
перед -exec
, чтобы пропустить файлы, которые уже имеют (как минимум )эти разрешения.
Сsfind
реализацией find
(, которая также является find
встроенной оболочкой bosh
), вы можете использовать предикат -chmod
, за которым следует -chfile
(, который применяет изменения):
sfind. -name '* *.html' -type f -chmod u+rw,go+r -chfile
(нет необходимости добавлять ! -perm...
, так как sfind
-chfile
уже пропускает файлы, которые уже имеют правильные разрешения ).
Этот вариант наиболее эффективен, поскольку не требует выполнения отдельной chmod
команды в новом процессе для каждого такого количества файлов, а также потому, что он позволяет избежать двойного поиска полного пути к каждому файлу(sfind
вызывает chmod()
системный вызов с путями файлов относительно каталогов sfind
находит их во время обхода, что означает chmod()
не нужно заново искать все компоненты пути, ведущие к ним ).
Сzsh
:
chmod -v -- u+rw,go+r **/*' '*.html(D.)
Здесь используется рекурсивная подстановка команд оболочки и квалификаторы D
и.
glob для соответственно включения скрытых файлов и ограничения обычными файлами (, как -type f
). Добавьте ^f[u+rw,go+r]
, чтобы также пропускать файлы, у которых уже есть такие разрешения.
Вы не можете использовать chmod
's -R
для этого в сочетании с globs. Подстановки расширяются оболочкой, а не соответствуют chmod
, поэтому сchmod -Rv... *' '*.html
(обратите внимание, что эти *
должны быть оставлены без кавычек, чтобы оболочка интерпретировала их как подстановочные операторы ),вы просто передадите список html
файлов в chmod
, и только если какой-либо из этих файлов будет каталогом, chmod рекурсивно перейдет к ним и изменит разрешения для всех файлов там.
«Имена файлов с пробелами» требуют find
и xargs
. Прочтите man find xargs
и сделайте что-то вроде:
find. -type f -name '*.html' -print0 | \
xargs -0 -r echo chmod u=rwx,g=r,o
Удалите " echo
", если это вам подходит.