【问题标题】:rename files in a directory to insert spaces before and after a dash [duplicate]重命名目录中的文件以在破折号前后插入空格[重复]
【发布时间】:2020-01-22 06:25:34
【问题描述】:

我有一个目录,其中包含以下类型的文件:

01.firstname surname-track1 name1.mp3
02.firstname surname-track2 name2.mp3
03.firstname surname-track3 name3.mp3

我正在寻找一个BASH命令来批量重命名我在目录中的所有文件,以便在破折号前后有一个空格,例如:

01.firstname surname - track1 name1.mp3
02.firstname surname - track2 name2.mp3
03.firstname surname - track3 name3.mp3

非常感谢任何帮助!

【问题讨论】:

  • 使用rename 命令,它允许您提供基于模式的替换。
  • 欢迎来到 Stack Overflow! Stack Overflow 用于编程问题,而不是关于使用或配置 Unix 及其实用程序的问题。 Unix & LinuxSuper User 将是解决此类问题的更好地方。

标签: bash whitespace file-rename batch-rename


【解决方案1】:

按照 Barmar 的建议,您可以使用重命名(或文件名)。 在你的情况下:

file-rename 's/-/ - /g' *.mp3

它是基于正则表达式的,所以它非常强大(因此很危险),在运行它之前,你可以“干”运行它,它会告诉你你的命令将要改变什么:

file-rename -n 's/-/ - /g' *.mp3

【讨论】:

  • 谢谢,但这并不能完全理解我所追求的,它给出了:01 - 名字姓氏 - track1 name1.mp3 等等......你能做到吗,它给出:01 . 名字姓氏 - track1 name1.mp3 ?你的命令是去掉轨道号后面的句号,我想保持理想状态。谢谢!
  • 您使用的是哪个rename? utils-linux 的那个不支持正则表达式。
  • 这是一个 perl 包:/usr/bin/file-rename using File::Rename version 0.20
  • 我只是在 Ubuntu 18.04LTS 中使用标准版本。我应该安装一个不同的吗?
【解决方案2】:

您可以使用 bash 参数替换:

for i in *.mp3; do mv $i ${i/-/ - }; done

或者,您可以使用重命名(来自 util-linux 包)

rename '-' ' - ' *.mp3

或 prename(根据上述答案,我认为某些发行版将此作为重命名)

prename 's/-/ - /' *.mp3

【讨论】:

    猜你喜欢
    • 2021-06-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-05-02
    • 2022-01-22
    • 1970-01-01
    • 2019-10-31
    • 2018-07-16
    相关资源
    最近更新 更多