Как обрабатывать имена файлов с пробелами при изменении разрешений для определенных файлов в текущем каталоге и всех его подкаталогах?

У меня была такая же проблема. нашел решение здесь . Джон Хаген :Для меня эта проблема была проблемой XRDP, исправленной в CentOS 7.6 путем редактирования /etc/xrdp/xrdp.ini и изменения на max _bpp=24.

не забудьте перезапустить

0
24.05.2021, 05:23
2 ответа

Используйте предикат -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 рекурсивно перейдет к ним и изменит разрешения для всех файлов там.

3
28.07.2021, 11:29

«Имена файлов с пробелами» требуют findи xargs. Прочтите man find xargsи сделайте что-то вроде:

find. -type f -name '*.html' -print0 | \
    xargs -0 -r echo chmod u=rwx,g=r,o

Удалите " echo", если это вам подходит.

0
28.07.2021, 11:29

Теги

Похожие вопросы