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

提取文件名中客户编号与案件编号并实现文件批量迁移

批量生成文件迁移命令(提取客户/案件编号)

需求

  • 提取客户编号:单个字母开头,后续为3-5位带/不带零填充的数字,保留原格式
  • 提取案件编号:紧跟客户编号的4位数字,无则填充0000
  • 生成可直接执行的迁移命令,格式要求:
    mkdir -p "/dest/客户编号/案件编号/"; cp -p "原文件完整路径" "/dest/客户编号/案件编号/原文件名"
    

示例文件名

A006280002.40.D7A5A.msg
A006280002.41.C7E4E.msg
A006280002.42.16362.msg
A006280002.43.C4048.msg
A12960004.1.4D6AC.xls
K00976.1.81F42.pdf

现有问题

原sed命令丢失了文件的完整路径,导致cp命令无法定位源文件,无法正常执行。

修正后的命令

使用find结合sed,保留完整路径信息,同时完成编号提取与命令生成:

find . -type f -print0 | sed -zE '
  s|^(.*)/([^/]+)$|\1\x00\2|;
  s|^([^\x00]*)\x00([a-zA-Z][0-9]{3,5})([0-9]{4})(\..*)$|mkdir -p "/dest/\2/\3/"; cp -p "\1/\2\3\4" "/dest/\2/\3/\2\3\4"|;
  s|^([^\x00]*)\x00([a-zA-Z][0-9]{3,5})(\..*)$|mkdir -p "/dest/\2/0000/"; cp -p "\1/\2\3" "/dest/\2/0000/\2\3"|
'

命令说明

  1. find . -type f -print0:遍历当前目录下所有文件,用\0分隔路径,避免文件名含空格、特殊字符时出现解析错误
  2. 第一个sed替换:将完整路径拆分为目录路径和文件名两部分,用\x00作为分隔符
  3. 第二个sed替换:匹配包含4位案件编号的文件名,生成对应迁移命令(客户编号为字母+3-5位数字,后续4位为案件编号)
  4. 第三个sed替换:匹配无4位案件编号的文件名,自动填充0000作为案件编号后生成迁移命令

执行方式

  • 直接执行:将上述命令在终端运行,自动创建目标目录并复制文件
  • 批量执行:将命令输出保存为脚本文件,后续执行:
    # 生成脚本
    find . -type f -print0 | sed -zE '
      s|^(.*)/([^/]+)$|\1\x00\2|;
      s|^([^\x00]*)\x00([a-zA-Z][0-9]{3,5})([0-9]{4})(\..*)$|mkdir -p "/dest/\2/\3/"; cp -p "\1/\2\3\4" "/dest/\2/\3/\2\3\4"|;
      s|^([^\x00]*)\x00([a-zA-Z][0-9]{3,5})(\..*)$|mkdir -p "/dest/\2/0000/"; cp -p "\1/\2\3" "/dest/\2/0000/\2\3"|
    ' > migrate_files.sh
    
    # 赋予执行权限
    chmod +x migrate_files.sh
    
    # 执行脚本
    ./migrate_files.sh
    

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.01 02:44:56