【问题标题】:How to rename multiple files in BASH removing specifically an n number of character from back to front如何在 BASH 中重命名多个文件,具体从后到前删除 n 个字符
【发布时间】:2015-08-07 13:34:21
【问题描述】:

我有这样的文件:

foo_bar_hfh4.ext

foobar_bar_2fr4.ext

foobar_foobar_5ytu.ext

foobarfoobar_foobar_rtnm.ext

等等

我的问题是如何从每个名称中删除最后 5 个(或 n 个)字符,保留扩展名。每个文件的字符数总是不同的,所以不能从左到右查找。

_ 字符总是出现两次,是我需要删除的 5 个字符系列中的第一个字符。要删除的字符中没有其他模式。

我知道 Thunar Bulk Rename 可以在 gui 中轻松完成此操作。但是 BASH 呢?

【问题讨论】:

  • rename 's/.{5}(\.[^.]*)$/$1/' *
  • 你能添加你的代码吗?
  • 太棒了。就是这样做的。谢谢 anishsane。
  • 我对您的代码做了一个小改动:重命名 's/.{5}(\.[^.]*)$/$1/' *.ext 以便只有 .ext 文件受影响(同一目录下还有其他文件;忘了提及)

标签: bash rename


【解决方案1】:

perl rename 实用程序是针对此类问题而设计的:

rename 's/.{5}([.][^.]*)$/$1/' *

注意:这需要rename 的perl 版本。还有一个rename 实用程序是 util-linux 的一部分,但它完全不兼容。不要尝试将它与上面的命令一起使用。

【讨论】:

  • 你指的是“libfile-rename-perl”吗?因为那个没有安装在我的系统中,但是你的命令运行良好。
  • 如果上面的命令有效,那么它就是正确的。在类似 debian 的系统上,rename 包含在名为 prename 的默认 perl 包中。 rename 包中的版本略有不同。 libfile-rename-perl 是安装rename 的虚拟包。不幸的是,有些 Linux 发行版默认安装了另一个不兼容的发行版。
猜你喜欢
  • 2013-11-01
  • 2022-09-27
  • 2013-07-10
  • 2015-02-23
  • 2013-06-05
  • 1970-01-01
  • 2013-10-08
  • 2016-07-20
  • 2019-06-26
相关资源
最近更新 更多