我想首先区分一下使用不同的文件名重复命令不是我要问的。
我的问题是,如何构建一个包含文件名目录的单个命令,每个命令都以命令的 --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} 替换到您的命令中即可。
HTH。