Запустить все скрипты в каталоге в Linux
У меня есть пара скриптов в моем каталоге Documents:
$ ls Documents/ linux.sh ostechnix.sh script1.sh script2.sh script3.sh script4.sh
Все они представляют собой простые однострочные скрипты оболочки, которые отображают заданную строку (и) с помощью команды «echo» в стандартном выводе.
Прежде чем я узнал, что мы можем запустить все скрипты в данной папке, я обычно выполнял скрипт следующим образом:
$ chmod +x script.sh
$ ./script.sh
или
$ sh script.sh
Я снова делаю второй скрипт исполняемым, запускаю его и так далее.
Ну, тебе не нужно так поступать.
Мы можем запустить все скрипты в каталоге или пути, используя команду «run-parts».
Команда run-parts используется для запуска скриптов или программ в одном каталоге или по одному пути.
$ run-parts <directory-path>
Один из недостатков команды run-parts – она не выполняет все скрипты.
Это будет работать, только если ваши скрипты имеют правильные имена.
Имена должны состоять полностью из прописных и строчных букв ASCII, цифр ASCII, подчеркиваний ASCII и минус-дефисов ASCII.
Чтобы решить эту проблему с именами, мы можем использовать параметр regex.
Например, следующая команда найдет и запустит все файлы скриптов в каталоге ~/Documents, который начинается с буквы «s» и заканчивается расширением «sh»:
$ run-parts --regex '^s.*sh$' ~/Documents
$ run-parts --regex '.*sh$' ~/Documents
Чтобы вывести имена всех файлов в каталоге «Documents», которые начинаются с буквы «s» и заканчиваются расширением «sh», выполните:
$ run-parts --list --regex '^s.*sh$' Documents Documents/script1.sh Documents/script2.sh Documents/script3.sh Documents/script4.sh
Эта команда только выведет имена файлов скрипта, но не выполнит их.
Чтобы вывести список всех файлов, заканчивающихся на .sh в каталоге Documents, запустите:
$ find ~/Documents -maxdepth 1 -type f -executable -name 's*' -exec {} \;
$ find ~/Documents -type f -executable -name 's*' -exec {} \;
$ find ~/Documents -maxdepth 1 -type f -executable -name '*.sh' -exec {} \;
$ for f in ~/Documents/s* ; do [ -x "$f" ] && [ ! -d "$f" ] && "$f" ; done
$ for f in ~/Documents/*.sh ; do [ -x "$f" ] && [ ! -d "$f" ] && "$f" ; done
Для более подробной информации обратитесь к справочным страницам.
$ man run-parts
$ man find