如何选择目录中的所有文件并运行命令

问题描述 投票:0回答:1

我想从工具运行命令来合并我的文件

http://snpeff.sourceforge.net/SnpSift.html#Split

java -jar ~/snpEff_latest_core/snpEff/SnpSift.jar split -j file1.vcf file2.vcf file3.vcf ...  > huge.out.vcf

我有 400 多个文件,因此逐一输入可能会出错。

我尝试过这样的事情

 find -name "*.vcf" | java -jar ~/snpEff_latest_core/snpEff/SnpSift.jar split -j > comb.vcf

这是我遇到的错误

Error: Cannot 'join' less than two files.
SnpSift split -j
SnpSift version 4.1k (build 2015-09-07), by Pablo Cingolani

Usage: java -jar SnpSift.jar splitChr [-j] [-l <num>] file.vcf [file_2.vcf ... file_N.vcf]
Options:
    -j         : Join all files in command line (output = STDOUT).
    -l <num>   : Split by 'num' lines.
    Default    : Split by chromosome (one file per chromosome).

我在其他工具上使用过这个“find -name”,它似乎有效。

所以我的问题是,如何选择目录中的所有文件并运行命令。

linux find
1个回答
0
投票

你可以尝试:

java -jar ~/snpEff_latest_core/snpEff/SnpSift.jar split -j file*.vcf

Bash 会将 file*.vcf 扩展到当前目录中与 file*.vcf 匹配的所有文件。

请注意,linux 对命令的长度有最大限制(大约 3MB)。

如果你想使用 find (给你更细粒度的选择),你可以使用这样的东西:

find . -exec java -jar ~/snpEff_latest_core/snpEff/SnpSift.jar split -j {} \+

这里“{}”替换为find找到的文件,\+的意思是:

-exec 操作对选定的文件运行指定的命令,但命令行是通过在末尾附加每个选定的文件名来构建的

© www.soinside.com 2019 - 2024. All rights reserved.