Повторяющийся аргумент командной строки

Повторяющийся аргумент командной строки

Я хочу начать с того, чтобы выделить то, чтоПовторение команды с разными именами файловэто не то, о чем я спрашиваю.

Мой вопрос в том, как создать одну команду с каталогом имен файлов в ней, каждое из которых начинается с части команды --thingy? В моем конкретном приложении я использую GATK (хотя этот вопрос касается создания вызова командной строки), и даже более конкретноГенотипGVCF. Моя проблема в том, что команда должна выглядеть так:

java -jar GenomeAnalysisTK.jar \
-T GenotypeGVCFs \
-R reference.fasta \
--variant sample1.g.vcf \
--variant sample2.g.vcf \
-o output.vcf

но у меня 93 варианта файлов, поэтому --variantстроку нужно повторить 93 раза, каждый с другим путем к файлу. Они все находятся в одном каталоге вместе, и у всех у них одинаковое расширение (*.g.vcf).

Я пытался сделать что-то с помощью find -exec +, но не смог придумать способ прикрепить --variantк каждому результату. xargsтоже кажется многообещающим, но я не очень хорошо понимаю, что он делает, и поэтому у меня возникли проблемы с его настройкой. На этом этапе я мог бы просто заставить скрипт Python сгенерировать команду, а затем просто вставить ее в терминал, но я хотел бы узнать, есть ли «правильный» способ сделать это в будущем.

решение1

Теоретически это может помочь, но я никогда не пробовал такое. Если бы я был вами, я бы echoсначала проверил это с помощью какой-нибудь команды, перед запуском javaпрограммы.

java -jar GenomeAnalysisTK.jar \
-T GenotypeGVCFs \
-R reference.fasta \
$(for v in *.g.vcf;do echo --variant ${v}" \\";done) -o output.vcf

решение2

Хитрость в том, чтобы получить нужный вам список и манипулировать каждым элементом. Попробуйте перейти в каталог с вашими вариантными файлами и что-то вроде

FILES=$(ls | sed 's/^/--variant /')
echo ${FILES}

Затем просто подставьте ${FILES} в вашу команду.

НТН.

Связанный контент