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

求助:批量为三级目录下的fastq.gz文件创建软链接

批量创建trio-WES样本fastq.gz软链接方案

方案1:复刻源目录结构到目标目录

如果希望目标目录和源目录的三级层级完全对应(比如源目录为/source/家系ID/样本ID/xxx.fastq.gz,目标目录同步为/target/家系ID/样本ID/xxx.fastq.gz),用以下脚本:

# 替换为你的实际源根目录和目标根目录
SOURCE_ROOT="/path/to/source"
TARGET_ROOT="/path/to/target"

# 遍历第三级所有fastq.gz文件,创建对应目录并软链接
find "$SOURCE_ROOT" -mindepth 3 -maxdepth 3 -type f -name "*.fastq.gz" | while read -r FILE; do
    # 提取源文件相对于根目录的路径
    REL_PATH="${FILE#$SOURCE_ROOT/}"
    # 拼接目标文件路径
    TARGET_FILE="$TARGET_ROOT/$REL_PATH"
    # 创建目标父目录(不存在则自动生成)
    mkdir -p "$(dirname "$TARGET_FILE")"
    # 创建软链接
    ln -s "$FILE" "$TARGET_FILE"
done

关键说明

  • find命令精准锁定第三级的fastq.gz文件,避免遍历更深层级
  • while read -r FILE处理含空格的文件名,防止报错
  • mkdir -p确保目标路径的父目录存在,不会因目录缺失中断操作
  • 用绝对路径创建软链接,确保无论目标目录位置如何都能访问源文件

方案2:自定义目标目录结构(按样本类型归类)

如果需要将父、母、患者样本分别归类到目标目录的不同子文件夹(如/target/父亲/、/target/母亲/、/target/先证者/),可根据文件名或二级目录特征调整脚本:

场景A:通过文件名识别样本类型

假设文件名包含_F_(父)、_M_(母)、_P_(先证者)标识:

SOURCE_ROOT="/path/to/source"
TARGET_ROOT="/path/to/target"

# 预创建分类目录
mkdir -p "$TARGET_ROOT/father" "$TARGET_ROOT/mother" "$TARGET_ROOT/proband" "$TARGET_ROOT/unclassified"

find "$SOURCE_ROOT" -mindepth 3 -maxdepth 3 -type f -name "*.fastq.gz" | while read -r FILE; do
    FILENAME=$(basename "$FILE")
    # 根据文件名匹配分类,需根据实际命名规则修改
    if [[ "$FILENAME" == *"_F_"* ]]; then
        ln -s "$FILE" "$TARGET_ROOT/father/$FILENAME"
    elif [[ "$FILENAME" == *"_M_"* ]]; then
        ln -s "$FILE" "$TARGET_ROOT/mother/$FILENAME"
    elif [[ "$FILENAME" == *"_P_"* ]]; then
        ln -s "$FILE" "$TARGET_ROOT/proband/$FILENAME"
    else
        ln -s "$FILE" "$TARGET_ROOT/unclassified/$FILENAME"
    fi
done

场景B:通过二级目录识别样本类型

如果二级目录直接是样本类型(如/source/家系ID/father/xxx.fastq.gz):

SOURCE_ROOT="/path/to/source"
TARGET_ROOT="/path/to/target"

find "$SOURCE_ROOT" -mindepth 3 -maxdepth 3 -type f -name "*.fastq.gz" | while read -r FILE; do
    # 提取二级目录名称(样本类型)
    SAMPLE_TYPE=$(basename "$(dirname "$FILE")")
    # 创建分类目录
    mkdir -p "$TARGET_ROOT/$SAMPLE_TYPE"
    # 创建软链接
    ln -s "$FILE" "$TARGET_ROOT/$SAMPLE_TYPE/$(basename "$FILE")"
done

预验证操作

执行脚本前,可替换mkdir -p和ln -s为echo,预览所有操作,确保路径正确:

SOURCE_ROOT="/path/to/source"
TARGET_ROOT="/path/to/target"

find "$SOURCE_ROOT" -mindepth 3 -maxdepth 3 -type f -name "*.fastq.gz" | while read -r FILE; do
    REL_PATH="${FILE#$SOURCE_ROOT/}"
    TARGET_FILE="$TARGET_ROOT/$REL_PATH"
    echo "待创建目录: $(dirname "$TARGET_FILE")"
    echo "待创建链接: $FILE -> $TARGET_FILE"
done

内容的提问来源于stack exchange,提问作者R.L. the Researcher

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.20 02:15:07