Ответ 1
используйте find:
find . -name "*.sh" -exec chmod +x {} \;
Используя chmod
, я делаю chmod +x *.sh
в текущем каталоге, но что, если я хочу изменить все файлы, включая файлы в подпапках с расширением sh файла?.
chmod +x -R *
будет работать, но мне нужно что-то большее, как chmod +x -R *.sh
используйте find:
find . -name "*.sh" -exec chmod +x {} \;
Попробуйте использовать великолепную комбинацию find с xargs.
find . -iname \*.sh -print0 | xargs -r0 chmod +x
.
каталог для запуска, в данном случае рабочий каталог.
В современных версиях find
вы получаете преимущества подхода xargs
, который позволяет избежать нескольких вызовов команды (chmod
). Команда немного отличается.
find . -name "*.sh" -exec chmod +x {} +
Снимите find
docs в Arch 2015.09.01 ( выделение, добавленное мной):
-exec command {} +
Этот вариант действия
-exec
запускает указанную команду в выбранных файлах , но командная строка создается путем добавления каждого имени выбранного файла в конце; общее количество вызовов команды будет намного меньше количества сопоставленных файлов. Командная строка построена таким же образом, чтоxargs
строит свои командные строки. Внутри команды допускается только один экземпляр{}
. Команда запускается в стартовом каталоге.