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

如何在将多子目录同名文件移动到同一新位置时自动重命名

方案1:自动给重名文件加序号后缀(最简实现)

如果仅需避免覆盖,不需要文件名关联原文件路径,直接给mv加上--backup=numbered参数即可,重名文件会自动加上.~1~、.~2~这类递增序号后缀:

mkdir -p raml_log_files && find . -type f -name "raml-proxy.log" -exec mv --backup=numbered {} raml_log_files/ \;

注意:该方案依赖GNU版本的mv,Linux环境默认支持,macOS需要先安装coreutils包替换系统自带的mv

方案2:文件名关联原路径,既去重也可溯源

如果需要从归集后的文件名追溯原文件的路径,可选择以下两种子方案:

  • 子方案A:路径转下划线拼接,可读性高
    把原文件的相对路径里的分隔符/替换为下划线,直接拼到文件名中:
    mkdir -p raml_log_files
    find . -type f -name "raml-proxy.log" -exec bash -c '
      for file in "$@"; do
        new_name=$(echo "$file" | tr / _)
        mv "$file" "raml_log_files/${new_name}"
      done
    ' bash {} +
    
    例如原路径./app1/prod/logs/raml-proxy.log会被重命名为._app1_prod_logs_raml-proxy.log,从文件名就能直接看到原路径层级。
  • 子方案B:路径哈希拼接,文件名长度稳定
    计算原文件相对路径的哈希值取前8位拼到文件名中,适合路径特别长的场景:
    mkdir -p raml_log_files
    find . -type f -name "raml-proxy.log" -exec bash -c '
      for file in "$@"; do
        hash=$(echo "$file" | md5sum | cut -c1-8)
        mv "$file" "raml_log_files/raml-proxy-${hash}.log"
      done
    ' bash {} +
    

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.28 18:27:03