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

使用find和rename重命名文件时出现“No such file or directory”错误排查

问题:批量重命名JSON文件时提示rename命令不存在

现有文件

ui-service-3.100.503505.json
kibana-store-end-3.103.103505.json
api-application-3.4003.10350665.json

执行的命令

find . -type f -iname "*.json"  -exec rename 's/[0-9]//g' {} \; 

错误信息

find: ‘rename’: No such file or directory

期望输出文件名

ui-service.json
kibana-store-end.json
api-application.json

问题原因与解决办法

1. rename命令不存在的核心原因

不同系统的rename工具差异极大:

  • Debian/Ubuntu默认预装Perl版本的rename,但RHEL/CentOS/Fedora、macOS等系统默认没有这个命令,或自带的rename语法完全不同。
  • 你当前的系统未安装对应版本的rename,导致find找不到该命令。

2. 通用兼容方案(无需依赖rename)

用find+bash+sed实现需求,适配绝大多数系统:

find . -type f -iname "*.json" -exec bash -c '
  for file do
    newname=$(echo "$file" | sed -E "s/-[0-9.]+//g")
    mv "$file" "$newname"
  done
' bash {} +
  • sed -E "s/-[0-9.]+//g":精准匹配文件名中-开头、后续跟着数字和.的版本号段,直接替换为空,完全符合你的需求。
  • 用bash -c批量循环处理文件,比逐个执行exec效率更高。

3. 若坚持使用rename的针对性方案

  • Debian/Ubuntu系统:修正正则后直接用原逻辑(你之前的正则只删数字,没处理-和.):
    find . -type f -iname "*.json" -exec rename 's/-[0-9.]+//g' {} \;
    
  • RHEL/CentOS/Fedora系统:先安装util-linux包获取rename,再用其专属语法:
    sudo dnf install util-linux
    find . -type f -iname "*.json" -exec rename '-[0-9.]+' '' {} \;
    
  • macOS系统:通过Homebrew安装Perl版rename,再执行修正后的命令:
    brew install rename
    find . -type f -iname "*.json" -exec rename 's/-[0-9.]+//g' {} \;
    

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.23 09:18:35