Как изменить разрешение файла для определенного шаблона файла на подпапки моего текущего каталога? - PullRequest
30 голосов
/ 22 ноября 2010

Используя chmod, я делаю chmod +x *.sh в текущем каталоге, но что, если я хочу изменить все файлы, включая файлы в подпапках, которые имеют расширение sh?

chmod +x -R * будет работать, но мне нужно что-то более похожее на chmod +x -R *.sh

Ответы [ 3 ]

52 голосов
/ 22 ноября 2010

используйте находку:

find . -name "*.sh" -exec chmod +x {} \;
9 голосов
/ 22 ноября 2010

Попробуйте использовать великолепную комбинацию find с xargs.

find . -iname \*.sh -print0 | xargs -r0 chmod +x

. - каталог для запуска, в данном случае рабочий каталог.

3 голосов
/ 16 сентября 2015

В современных версиях find вы получаете преимущества подхода xargs, который позволяет избежать нескольких вызовов команды (chmod). Команда только немного отличается.

find . -name "*.sh" -exec chmod +x {} <strong>+</strong>

Снип от find документы на Arch 2015.09.01 ( выделение добавлено мной):

-exec command {} +

Этот вариант действия -exec запускает указанную команду для выбранных файлов, , но командная строка создается путем добавления каждого выбранного имени файла в конце; общее количество вызовов команды будет намного меньше, чем количество совпавших файлов . Командная строка строится почти так же, как xargs строит свои командные строки. В команде разрешен только один экземпляр {}. Команда выполняется в начальном каталоге.

...