Bash在不同目录中的文件上循环并打印输出

Bash在不同目录中的文件上循环并打印输出,bash,shell,Bash,Shell,我在目录/mypath/mydir/中有*.vcf、*.vcf.vfidx和*.vcf.idx文件。我只想使用下面的命令(对于文件1)循环查看.vcf文件: 用于一个vcf文件的命令: vcf-subset -c sample.txt vcffile1.vcf | bgzip -c > output_vcfile1.vcf_.vcf.gz 有人能帮助循环所有的.vcf(不是vcf.vfidx或vcf.idx)文件,并使用上面显示的命令获取指定目录中每个文件的输出吗?/get/inthi

我在目录
/mypath/mydir/
中有
*.vcf
*.vcf.vfidx
*.vcf.idx
文件。我只想使用下面的命令(对于文件1)循环查看
.vcf
文件:

用于一个vcf文件的命令:

vcf-subset -c sample.txt vcffile1.vcf | bgzip  -c > output_vcfile1.vcf_.vcf.gz

有人能帮助循环所有的.vcf(不是
vcf.vfidx
vcf.idx
)文件,并使用上面显示的命令获取指定目录中每个文件的输出吗?/get/inthis/dir/

for i in *.vcf; do echo "$i"; done
全局模式
*.vcf
将只匹配以
.vcf
结尾的文件

你的命令:

for i in *.vcf; do
    vcf-subset -c sample.txt "$i" | bgzip  -c > /get/inthis/dir/output_"$i"_.vcf.gz
done

如果必须在特定目录中搜索
.vcf
文件,例如
/foo/bar/
,请执行以下操作:

for i in /foo/bar/*.vcf; do
    vcf-subset -c sample.txt "$i" | bgzip  -c > /get/inthis/dir/output_"${i##*/}"_.vcf.gz
done

谢谢,但您如何提及查找vcf文件的目录以及打印输出文件的目录?谢谢。所以
$i
表示这里的每个
.vcf
文件?它不会在任何
.vcf.vcfidx
文件上循环?我只是想澄清一下……谢谢。如果您在/foo/bar/*.vcf中为i指定了
,那么如何在
$i
之前指定
.vcf
文件的目录路径;如果执行
,它将打印
/get/inthis/dir/output_“$i”\uu.vcf.gz
中的
$i
的完整路径,生成错误:
没有这样的文件或目录
。搜索文件的最佳方法是什么,并且文件名只在
$i
中,而不是在全文中path@MAPK是的,这称为参数扩展..检查man bash的参数扩展部分