【问题标题】:Linux - rename all files by replacing last hyphen with '##'Linux - 通过用“##”替换最后一个连字符来重命名所有文件
【发布时间】:2016-08-06 05:13:04
【问题描述】:

请任何人。

我如何在 Linux 中重命名一堆文件,例如:

abc-def-0001.xxx
acb-def-0002.xxx

到:

abc-def##0001.xxx
...

我尝试了一些 SO 的建议,例如:

重命名's/(.*)-/$1##/' *.xxx

但在我的环境中没有按预期工作。

【问题讨论】:

  • “没用”是什么意思?
  • 没有文件被重命名。
  • 那么你的环境是什么?在我的bash 上,您的命令运行良好。
  • 重命名(util-linux-ng 2.17.2)

标签: linux bash shell


【解决方案1】:

您可以在正则表达式中使用前瞻:

rename -n 's/-(?=\d)/##/' *.xxx

这将匹配并替换第一个 _,后跟一个数字。

但是,您的模式 's/(.*)-/$1##/' 也适用于给定的示例,但这假设您总是替换最后一个下划线。

【讨论】:

  • 别忘了,创建包含“#”等字符的文件名的人将面临永恒的诅咒……虽然允许,但某些字符(#、%、\、空格, ....) 在其他情况下被大量使用,你只是在招惹麻烦。
【解决方案2】:

所以我最终使用了:

for i in *;做 mv "$i" "`echo $i | sed "s/\(.*\)-/\1##/"`";完成

我认为我的 rename 命令版本不支持 perl 表达式...

【讨论】:

    猜你喜欢
    • 2022-01-14
    • 2016-07-13
    • 2021-02-12
    • 2019-07-29
    • 2022-01-04
    • 2013-11-01
    • 2021-01-21
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多