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



我有一个文件列表,其中日期已添加到末尾。 例如:合唱左八度(合并)(2020_10_14 20_27_18 UTC)。文件将以.wav或.mp3结尾

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

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

现在,我正在尝试实际重命名文件。在我的终端中,我已经CD到带有文件的文件夹中。根据这里的其他答案,我尝试过:

  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,以避免无意中破坏现有文件。

最新更新