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

在bash中从文件名列表动态提取各字符串独有模式的实现方法

Bash动态提取文件名独有差异段最优实现

核心逻辑是先计算所有输入文件名的最长公共前缀和最长公共后缀,每个文件名剔除前后公共部分后剩余的内容,就是需要提取的独有差异段,该方案不依赖固定命名模式,适配任意规则的同组文件名。

完整可复用脚本
extract_unique_parts() {
    # 输入参数:逗号分隔的文件名列表
    local files=(${1//,/ })
    local file_count=${#files[@]}
    (( file_count < 2 )) && { echo "${files[0]}"; return; }

    # 1. 计算最长公共前缀
    local prefix=${files[0]}
    for f in "${files[@]}"; do
        while [[ "$f" != "$prefix"* ]]; do
            prefix=${prefix%?}
        done
    done
    local prefix_len=${#prefix}

    # 2. 计算最长公共后缀
    local suffix=${files[0]}
    for f in "${files[@]}"; do
        while [[ "$f" != *"$suffix" ]]; do
            suffix=${suffix#?}
        done
    done
    local suffix_len=${#suffix}

    # 3. 提取每个文件的独有部分并拼接
    local result=()
    for f in "${files[@]}"; do
        local trimmed=${f:$prefix_len}
        trimmed=${trimmed:0: ${#trimmed} - $suffix_len}
        result+=("$trimmed")
    done

    # 输出逗号分隔的结果
    local IFS=,
    echo "${result[*]}"
}
使用测试示例
  • 测试示例1:
extract_unique_parts "Exp1_ML_Rep1.txt,Exp1_ML_Rep2.txt,Exp1_ML_Rep3.txt"
# 输出:Rep1,Rep2,Rep3
  • 测试示例2:
extract_unique_parts "Exp2_DT_10ng_55C_1_User1.png,Exp2_DT_10ng_55C_2_User1.png,Exp2_DT_10ng_55C_3_User1.png"
# 输出:1,2,3
  • 测试双字符串场景:
extract_unique_parts "ER_Rep1,ER_Rep2"
# 输出:Rep1,Rep2
说明
  • 原生bash实现,无需额外安装任何工具,兼容所有标准bash环境
  • 自动适配任意命名规则的同组文件,不需要提前指定分隔符或匹配模式

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.13 09:12:04