我有一个文件列表,其中日期已添加到末尾。 例如:合唱左八度(合并)(2020_10_14 20_27_18 UTC)。文件将以.wav或.mp3结尾
我想离开(consolidated)
但取出日期。我已经提出了正则表达式并用 regexr.com 进行了测试。它确实在那里正确格式化文本。
正则表达式为:/(([0-9]+(.*)(?=.wav|.mp3))+/g
现在,我正在尝试实际重命名文件。在我的终端中,我已经CD到带有文件的文件夹中。根据这里的其他答案,我尝试过:
rename -n '/(([0-9]+(.*)(?=.wav|.mp3))+/g' *.wav|*.mp3
- 使用随自制软件一起安装的rename
sed '/(([0-9]+(.*))+/g' *.wav|*.mp3
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
,以避免无意中破坏现有文件。