Repetindo argumento de linha de comando

Repetindo argumento de linha de comando

Quero começar distinguindo queRepetindo comando com nomes de arquivos diferentesnão é o que estou perguntando.

Minha pergunta é: como você cria um único comando com um diretório de nomes de arquivos, cada um prefixado com a parte --thingy do comando? Na minha aplicação específica, estou usando GATK (embora esta questão seja sobre como construir a chamada de linha de comando) e ainda mais especificamenteGenótipoGVCFs. Meu problema é que o comando deve ficar assim:

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

mas tenho 93 arquivos variantes e, portanto, a --variantlinha precisa ser repetida 93 vezes, cada uma com um caminho de arquivo diferente. Eles estão todos no mesmo diretório e todos têm a mesma extensão (*.g.vcf).

Eu tentei fazer algo, find -exec +mas não consegui pensar em uma maneira de anexar --variantcada resultado. xargstambém parece promissor, mas não entendo muito bem o que ele faz e, por isso, estava tendo problemas para configurá-lo. Neste ponto, posso apenas fazer com que um script Python gere o comando e depois colá-lo no terminal, mas queria saber se existe uma maneira "correta" de fazer isso no futuro.

Responder1

Em teoria, isso pode ajudar, mas nunca tentei tal coisa. Se eu fosse você, testaria echoprimeiro com algum tipo de comando, antes de iniciar o javaprograma.

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

Responder2

O truque é obter a lista desejada e manipular cada elemento. Tente mudar para o diretório com seus arquivos variantes e algo como

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

Em seguida, basta substituir ${FILES} no seu comando.

HTH.

informação relacionada