如何设置文件路径仅获取后缀为.vcf.gz的pVCF文件?
解决方法
问题原因
你用*.vcf.gz匹配时,.vcf.gz.tbi文件会被误匹配——因为它的文件名里包含.vcf.gz字符串,通配符*会同时匹配到xxx.vcf.gz和xxx.vcf.gz.tbi(相当于*分别匹配了xxx和xxx.vcf.gz)。
具体解决方案
方案1:用bash扩展通配符精准过滤
先开启bash的扩展通配符功能,再用排除式匹配:
shopt -s extglob # 先验证匹配结果 ls /mnt/projects/samples/vcf_format/*.vcf.gz!(*.tbi)
如果你的程序支持直接传入文件列表,直接这样调用:
your_program /mnt/projects/samples/vcf_format/*.vcf.gz!(*.tbi)
方案2:用find命令精准定位文件
find命令能更精准筛选文件,避免误匹配:
# 先查看筛选结果 find /mnt/projects/samples/vcf_format -maxdepth 1 -type f -name "*.vcf.gz" ! -name "*.vcf.gz.tbi"
把筛选结果传给程序,推荐用xargs(适合文件数量多的场景):
find /mnt/projects/samples/vcf_format -maxdepth 1 -type f -name "*.vcf.gz" ! -name "*.vcf.gz.tbi" | xargs your_program
或者直接用命令替换(bash环境下):
your_program $(find /mnt/projects/samples/vcf_format -maxdepth 1 -type f -name "*.vcf.gz" ! -name "*.vcf.gz.tbi")
方案3:代码层面过滤(以Python为例)
如果你的file_url是在代码里定义的,先通配匹配再过滤掉.tbi文件:
import glob # 获取所有.vcf.gz后缀的文件 all_vcf_gz = glob.glob("/mnt/projects/samples/vcf_format/*.vcf.gz") # 排除带.tbi的文件 filtered_files = [f for f in all_vcf_gz if not f.endswith(".vcf.gz.tbi")] # 将filtered_files作为输入传给你的程序
内容的提问来源于stack exchange,提问作者Ava Wilson
相关产品推荐
相关产品推荐

