Запуск команды для всех соответствующих шаблонов имен файлов

У меня есть команда, которая принимает имя файла в качестве переменной, я дал его в качестве шаблона имени, file_*_123.txt

 Script.sh file_*_123.txt 

Теперь, если существует более одного файла с соответствующим шаблоном, который он выполняет только для первого файла, я хочу, чтобы этот скрипт выполнялся для каждого файла, соответствующего шаблону имени. например, file_1_123.txt, file_2_123.txt, file_3_123.txt

Кто-то вроде за кругом. Однако, поскольку количество файлов может быть 1 или более 1, поэтому не знаете, как выполнить итерацию.

Может кто-нибудь, пожалуйста, предложить решение для этого.

Это может включать вызов вашего скрипта в цикле или организацию вашего скрипта в цикле по аргументам командной строки.

Первый вариант:

 for filename in file_*_123.txt; do ./Script.sh "$filename" done 

Это вызовет ваш сценарий один раз для каждого файла, который соответствует file_*_123.txt шаблона file_*_123.txt .

Второй вариант:

Вы бы изменили скрипт и обернули его тело в цикл, такой как

 #!/bin/sh for filename do # here you do whatever you need to do with "$filename" done 

или же,

 #!/bin/sh for filename in "$@"; do # here you do whatever you need to do with "$filename" done 

(эти два варианта цикла эквивалентны)

Это может привести к тому, что скрипт зациклит свои аргументы командной строки Затем вы запустите свой скрипт, как показано в вопросе:

 ./Script.sh file_*_123.txt 

Если вы хотите выполнить эти совпадающие файлы параллельно, вы можете рассмотреть возможность использования утилиты параллельно

пример кода

 funcXXXX(){ file_path="${1}" /PATH/Script.sh "${file_path}" } # make function funcXXXX can be used by parallel export -f funcXXXX ls /PATH/file_*_123.txt | xargs -l | parallel -k -j 0 funcXXXX