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