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

如何递归为文件夹及子文件夹内文件追加最后修改日期至文件名?

递归给文件添加最后修改日期到文件名(保留扩展名)

我完全懂你的痛点——直接用find * -exec mv {} {}_Suffix \;会把后缀硬生生加到扩展名后面,比如photo.jpg变成photo.jpg_Suffix,确实不太合理。我们需要把日期精准插入到文件名主体和扩展名之间,而且要递归处理所有文件,下面给你针对Linux和macOS的两个实用解决方案:

Linux 版本命令

find . -type f -exec sh -c '
  for file do
    # 获取文件最后修改日期,格式化为「YYYYMMDD_HHMMSS」(可按需自定义格式)
    mod_date=$(stat -c "%Y%m%d_%H%M%S" "$file")
    # 拆分文件的目录路径、主体名和扩展名
    file_dir=$(dirname "$file")
    file_base=$(basename "$file")
    file_name="${file_base%.*}"
    file_ext="${file_base##*.}"
    
    # 单独处理无扩展名的文件(比如README这类纯文本文件)
    if [ "$file_name" = "$file_ext" ]; then
      new_file="${file_dir}/${file_name}_${mod_date}"
    else
      new_file="${file_dir}/${file_name}_${mod_date}.${file_ext}"
    fi
    
    # 执行重命名(第一次测试建议改成 echo mv,避免误操作)
    mv "$file" "$new_file"
  done
' sh {} +

macOS 版本命令

macOS的stat命令参数和Linux有差异,所以调整后的命令如下:

find . -type f -exec sh -c '
  for file do
    # macOS下获取格式化后的修改日期
    mod_date=$(stat -f "%Sm" -t "%Y%m%d_%H%M%S" "$file")
    file_dir=$(dirname "$file")
    file_base=$(basename "$file")
    file_name="${file_base%.*}"
    file_ext="${file_base##*.}"
    
    if [ "$file_name" = "$file_ext" ]; then
      new_file="${file_dir}/${file_name}_${mod_date}"
    else
      new_file="${file_dir}/${file_name}_${mod_date}.${file_ext}"
    fi
    
    mv "$file" "$new_file"
  done
' sh {} +

关键细节提示

  • 日期格式自定义:你可以修改%Y%m%d_%H%M%S,比如改成%Y-%m-%d就会得到2024-05-20这种更易读的日期后缀
  • 安全测试建议:第一次运行时,把mv "$file" "$new_file"改成echo mv "$file" "$new_file",这样只会打印要执行的重命名命令,确认格式正确后再改成真正的mv
  • 避免重复修改:如果担心重复执行命令导致文件名多次追加日期,可以给find加过滤条件,排除已经带日期后缀的文件:
    find . -type f ! -name "*_[0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9]_*" -exec ...
    

这样处理后,你的report.pdf会变成report_20240520_143022.pdf,无扩展名的notes会变成notes_20240520_143022,完全符合你的需求!

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.13 09:08:57