You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用Bash循环整理Fastq文件:创建目录并分类移动文件

批量处理Fastq文件的Bash循环方案

问题场景

所有Fastq文件存放在allpools目录下,命名规则固定,文件列表如下:

ls allpools
2022_pool_1_Seq_GEX.fastq.gz 
2022_pool_1_Seq_CMO.fastq.gz
2022_pool_2_Seq_GEX.fastq.gz 
2022_pool_2_Seq_CMO.fastq.gz

需要完成两个任务:

  1. 在allpools下根据文件中的池编号创建pool1、pool2这类目录
  2. 将原始Fastq文件分类移动到对应目录的子文件夹中,最终结构如下:
allpools/pool1/pool1_GEX # 包含pool_1的所有GEX类型Fastq文件
allpools/pool1/pool1_CMO # 包含pool_1的所有CMO类型Fastq文件
####
allpools/pool2/pool2_GEX # 包含pool_2的所有GEX类型Fastq文件
allpools/pool2/pool2_CMO # 包含pool_2的所有CMO类型Fastq文件

1. 创建对应池目录的Bash循环

通过提取文件名中的池编号并去重,批量创建目标目录:

cd allpools
# 提取唯一池编号并创建目录
for pool_num in $(ls *.fastq.gz | sed -E 's/.*pool_([0-9]+).*/\1/' | sort -u); do
    mkdir -p "pool${pool_num}"
done
  • sed -E 's/.*pool_([0-9]+).*/\1/':从文件名中精准提取池编号(如从2022_pool_1_...中提取1)
  • sort -u:对提取的编号去重,避免重复创建目录
  • mkdir -p:自动创建目录,若目录已存在则不报错

2. 分类移动Fastq文件的Bash循环

遍历所有Fastq文件,提取池编号和文件类型,创建子目录并完成移动:

cd allpools
for file in *.fastq.gz; do
    # 提取池编号
    pool_num=$(echo "$file" | sed -E 's/.*pool_([0-9]+).*/\1/')
    # 提取文件类型(GEX/CMO)
    file_type=$(echo "$file" | sed -E 's/.*_([A-Z]+)\.fastq\.gz/\1/')
    # 定义目标子目录路径
    target_dir="pool${pool_num}/pool${pool_num}_${file_type}"
    # 创建目标子目录
    mkdir -p "$target_dir"
    # 移动文件到目标目录
    mv "$file" "$target_dir/"
done
  • 两次sed分别提取池编号和文件类型,适配固定命名规则
  • mkdir -p自动创建多层级子目录
  • mv命令完成文件的分类迁移

内容的提问来源于stack exchange,提问作者User15Vim

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.14 04:01:13