файлы chmod с группой - ошибка файлов с (

Мне нужно изменить chmod файлы, которые находятся в определенной группе. Я придумал эту конструкцию:

find . -group groupname -exec sh -c 'su -c "chmod -R u+w,g-w,o-w,g+r,o+r ." - groupname {}' \;

Это работает, но не работает, когда в имени файла есть скобка (или).

Есть идеи?

0
16.02.2017, 01:47
2 ответа

Вы должны установить для переменной IFS значение $ (echo -en "\ n \ b") , например:

#!/bin/bash
SAVEIFS=$IFS
IFS=$(echo -en "\n\b")
find . -group groupname -exec sh -c 'su -c "chmod -R u+w,g-w,o-w,g+r,o+r ." - groupname {}' \;
IFS=$SAVEIFS
0
28.01.2020, 02:34

Как вы » При использовании интерполяции {} имя файла остается без кавычек, поэтому это немного похоже на запуск chmod u = rw some (filename) .txt , который завершится ошибкой, как вы описали .

Одно из решений - переместить {} из строки в кавычках, чтобы find мог правильно обработать его самостоятельно.

Другая проблема заключается в том, что вы, кажется, разделяете команду chmod , причем часть ее находится внутри su , а часть - снаружи. (Продемонстрируйте это, заменив sh на echo .) Результатом является неработающая команда, и я не совсем уверен, чего вы пытаетесь достичь.

Попробуйте это (удалите echo , когда вы уверены, что он делает то, что вы хотите):

su -c "
    find . -group groupname -exec echo chmod -R u+w,go+r,go-w {} \;
"

Вы действительно собираетесь применить рекурсивный chmod к каждому каталогу, который происходит иметь группу имя группы ? Возможно, вам следует рассмотреть -тип d в наборе предикатов.

2
28.01.2020, 02:34

Теги

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