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

Bash中文件夹内容比对:匹配文件夹与文件的特定数字段

解决文件夹与文件的跨格式匹配问题

这问题我碰到过类似的,diff因为两边命名格式差异太大,确实没法直接识别对应关系,得先把两边的共同数字标识提取出来再比对。给你两个实用的方法:

方法一:用Bash脚本(清晰易读,适合复杂场景)

写个简单的循环脚本,遍历folder1的子文件夹,提取数字部分后去folder2找对应文件:

#!/bin/bash
# 遍历folder1中符合格式的子文件夹
for dir in folder1/*_*.*.*; do
    # 跳过非目录项(如果有不符合格式的文件混在里面)
    [[ -d "$dir" ]] || continue
    
    # 提取下划线后的数字段:比如从"folder1/test_12345.1.2"得到"12345.1.2"
    num_part="${dir#folder1/*_}"
    
    # 检查folder2中是否存在对应.physio文件
    if [[ -f "folder2/${num_part}.physio" ]]; then
        echo "✅ 找到匹配:$dir ↔ folder2/${num_part}.physio"
    else
        echo "❌ 无对应匹配:$dir"
    fi
done

把这段代码存成match_check.sh,给执行权限chmod +x match_check.sh,运行就能看到结果。脚本里加了跳过非目录的判断,避免误处理folder1里的文件。

方法二:一行命令(快速执行,适合临时检查)

如果不想写脚本,用管道组合命令也能搞定:

ls -d folder1/*_*.*.* | sed 's/folder1\/.*_\(.*\)/\1/' | xargs -I {} sh -c 'if [ -f "folder2/{}.physio" ]; then echo "匹配:{}"; else echo "无匹配:{}"; fi'
  • ls -d只列出目录(避免列出folder1里的文件)
  • sed用来提取下划线后的数字段,把folder1/xxx_12345.1.2转换成12345.1.2
  • xargs把提取出的数字段传递给后续命令,检查对应.physio文件是否存在

如果只想看有匹配的项,去掉else部分就行:

ls -d folder1/*_*.*.* | sed 's/folder1\/.*_\(.*\)/\1/' | xargs -I {} sh -c 'if [ -f "folder2/{}.physio" ]; then echo "匹配:{}"; fi'

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.19 04:12:54