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

批量重命名文件并保留原文件名日期戳的方法咨询

批量重命名文件保留日期部分的解决方案

哈哈,批量重命名这种需求太常见了,我给你两种靠谱的方案,看你习惯用哪种:

方案一:纯Bash循环(兼容性拉满)

这种方法不需要额外安装工具,几乎所有Linux/Unix系统都支持,而且逻辑清晰,容易调整:

# 遍历所有符合原命名格式的文件
for file in filename.New_*.dat; do
    # 第一步:提取最后一个下划线后的内容(比如20160902.dat)
    date_part="${file##*_}"
    # 第二步:去掉.dat后缀,得到纯日期字符串(比如20160902)
    date_part="${date_part%.dat}"
    # 执行重命名
    mv "$file" "FILE_NAME_NEW.${date_part}.dat"
done

小提示:先测试再执行

如果你担心误操作,可以先把mv改成echo mv,这样会打印出将要执行的重命名命令,确认没问题后再改成真实的mv:

for file in filename.New_*.dat; do
    date_part="${file##*_}"
    date_part="${date_part%.dat}"
    echo mv "$file" "FILE_NAME_NEW.${date_part}.dat"
done

方案二:用Perl版rename命令(简洁高效)

如果你的系统装的是Perl版本的rename(大部分主流发行版比如Ubuntu、Debian默认都是这个),可以用一行命令搞定,非常简洁:

rename 's/filename\.New_(\d{8})\.dat/FILE_NAME_NEW.$1.dat/' filename.New_*.dat

命令解释

  • 正则表达式filename\.New_(\d{8})\.dat:匹配原文件名,其中(\d{8})会捕获8位数字的日期部分
  • 替换成FILE_NAME_NEW.$1.dat:$1就是刚才捕获的日期,直接替换到新文件名里

检查rename版本

如果不确定自己的rename是不是Perl版,可以运行rename --version,如果输出里有Perl相关的内容,就可以用这个命令;如果是util-linux版本的rename,语法不一样,建议用方案一更稳妥。

扩展:处理子目录里的文件

如果需要处理包括子目录在内的所有符合条件的文件,可以用find命令配合bash循环:

find /your/target/directory -type f -name "filename.New_*.dat" -exec bash -c '
    for file do
        # 提取日期
        date_part="${file##*_}"
        date_part="${date_part%.dat}"
        # 构造新路径:保留原目录,替换文件名
        new_file="${file%/*}/FILE_NAME_NEW.${date_part}.dat"
        mv "$file" "$new_file"
    done
' bash {} +

内容的提问来源于stack exchange,提问作者J.Lo

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.19 03:20:49