使用 sed/regex 重命名文件 - bash with macOS

Use sed/regex to rename a file - bash with macOS

我有一个文件列表,最后添加了一个日期。 例如:合唱左八度(合并)(2020_10_14 20_27_18 UTC)。文件将以 .wav 或 .mp3

结尾

我想离开 (consolidated) 但是把日期去掉。我想出了正则表达式并用 regexr.com 进行了测试。它确实在那里正确地格式化了文本。

正则表达式是:/(\([0-9]+(.*)(?=.wav|.mp3))+/g

现在,我正在尝试重命名这些文件。在我的终端中,我已将文件放入文件夹中。根据这里的其他答案,我尝试过:

  1. rename -n '/(\([0-9]+(.*)(?=.wav|.mp3))+/g' *.wav|*.mp3 - 使用 rename 与自制程序一起安装
  2. sed '/(\([0-9]+(.*))+/g' *.wav|*.mp3
  3. for f in *.wav|*.mp3; do mv "$f" "${f/(\([0-9]+(.*)(?=.wav|.mp3))+/g}” done

前两个不会抛出任何错误,但不会做任何重命名(我知道 rename 之后的 -n 只是打印出将要更改的文件,它实际上并没有更改文件)

最后一个启动 bash 会话。

我宁愿使用重命名或 sed,对我来说似乎更简单。但是,我做错了什么?

简而言之bash:

#!/bin/bash

pat='([0-9][0-9][0-9][0-9]_[0-9][0-9]_[0-9][0-9] [0-9][0-9]_[0-9][0-9]_[0-9][0-9] UTC)'
for f in *.mp3 *.wav; do echo mv "$f" "${f/$pat}"; done

删除 mv 之前的 echo 确保它能按预期工作。您还可以考虑将 -i 选项添加到 mv 以避免无意中破坏现有文件。