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

使用正则与rename命令批量修改多级目录下WAV文件名的小时字段

批量修改子目录下WAV文件的小时部分

没问题,我来帮你搞定这个批量重命名的需求!针对你这种主目录下多子目录、文件名格式为XXX-日期-小时:分:秒-MXX.wav的场景,这里提供两种实用的方法,你可以根据自己的系统环境选择:

方法一:用Perl版rename(推荐,适合大部分Linux发行版)

大部分主流Linux发行版(比如Ubuntu、Debian)默认自带的是Perl版本的rename,它支持正则表达式和简单的逻辑处理,非常适合这种场景。

场景1:固定替换小时值(比如把所有01小时改成02)

执行以下命令,它会自动遍历/rec下所有子目录的.wav文件,只修改小时部分,保留日期和其他内容:

find /rec -type f -name "*.wav" -exec rename 's/(\d{8})-(\d{2}):/\1-02:/' {} +
  • 正则解释:(\d{8})捕获8位的日期部分(比如27022018),(\d{2}):匹配原来的小时部分;替换时保留捕获的日期,把小时改成02。

场景2:小时值自动递增(比如01→02,23→00)

如果需要把小时统一加1(超过23自动循环到00),可以用带逻辑的Perl脚本:

find /rec -type f -name "*.wav" -exec rename '
    if (/(\d{8})-(\d{2}):/) {
        $new_hour = sprintf("%02d", ($2 + 1) % 24);
        s/(\d{8})-\d{2}:/$1-$new_hour:/;
    }
' {} +
  • 逻辑说明:先捕获日期和当前小时,计算新小时(加1后对24取模,保证循环),用sprintf补前导零(比如1→01),再替换原小时部分。

重要测试步骤

先不要直接执行重命名!可以加-n参数预览修改结果,确认无误后再去掉-n:

find /rec -type f -name "*.wav" -exec rename -n 's/(\d{8})-(\d{2}):/\1-02:/' {} +

方法二:用find+mv+sed(兼容所有Linux系统)

如果你的系统是原生rename(比如CentOS、RHEL),不支持Perl语法,可以用bash循环结合sed来实现:

固定替换小时值示例

find /rec -type f -name "*.wav" | while read -r file; do
    # 提取文件名(不含路径)
    filename=$(basename "$file")
    # 用sed替换小时部分,这里把01改成02
    new_filename=$(echo "$filename" | sed 's/\([0-9]\{8\}\)-[0-9]\{2\}:/\1-02:/')
    # 执行重命名
    mv "$file" "$(dirname "$file")/$new_filename"
done
  • 这个方法会逐行处理每个文件,引号包裹变量能避免文件名含空格时出错。

注意事项

  • 如果你需要替换的是其他小时值,只需要把命令中的02改成你目标的小时数即可。
  • 确保你对/rec目录有读写权限,否则会报错。

内容的提问来源于stack exchange,提问作者Isaí Madueño

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.19 10:34:15