【问题标题】:Use sed/regex to rename a file - bash with macOS使用 sed/regex 重命名文件 - bash 与 macOS
【发布时间】:2021-05-26 07:37:26
【问题描述】:

我有一个在末尾添加日期的文件列表。 例如:合唱左八度(合并)(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 不是操作系统
  • 我知道,但是你可以在 linux 等上使用 bash,所以我想指定我在操作系统上 - 我会更新以使其更清晰
  • 当然 bash 必须在 Linux 或 FreeBSD 等操作系统上运行...它不能在裸机上运行。编辑后仍然没有什么更清楚。事实上你不应该在标题上使用 bash 之类的东西,这是标签的工作

标签: regex bash sed rename


【解决方案1】:

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

【讨论】:

  • 所以这在mac上运行良好,我正在测试它,现在我需要在windows上做。你知道那个脚本是什么吗?我确实使用 v 5.0.17(1) 安装了 bash,我在 pat 之前添加了 set,并且我在 google/here 上尝试了几个不起作用的脚本。
  • @BethStevic 抱歉,我不知道如何在 Windows 上执行此操作。
  • 别担心!非常感谢你之前的脚本,它给了我一些东西
猜你喜欢
  • 2014-02-17
  • 2014-06-08
  • 2011-07-31
  • 2014-02-10
  • 2011-01-23
  • 2011-08-06
  • 2013-06-12
  • 2021-06-23
  • 2021-06-04
相关资源
最近更新 更多