【问题标题】:How to quickly rename a bunch of files in the folder如何快速重命名文件夹中的一堆文件
【发布时间】:2011-01-10 12:59:59
【问题描述】:

我有一堆名为“something_12345.doc”的文件(任何 5 位数字,不一定是 12345)。我需要将它们全部重命名为“something.doc”。这是一个 Unix 文件系统,我怀疑有一种方法可以只用一个命令来做到这一点......任何 Unix 正则表达式专家可以帮忙吗?

谢谢!

【问题讨论】:

  • 你将只剩下一个文件,基本上,你正在删除 N-1 个文件并将第 N 个文件复制到 something.doc -- 这是你想要的吗?
  • -1 因为被问经常。您应该先搜索 SO。

标签: unix rename batch-rename


【解决方案1】:

在 FreeBSD 上,您可能对 sysutils/renameutils 端口感兴趣。命令qmv 打开您的$EDITOR 并允许您在一个相当舒适的环境中指定所有文件重命名。我个人更喜欢qmv -fdo(单列)格式。

【讨论】:

    【解决方案2】:

    使用 sed

    ls *.doc | sed 's:\([^0-9_]\)[0-9_][0-9_]*\.doc:$(mv & \1.doc)' | /bin/bash
    

    【讨论】:

      【解决方案3】:
      【解决方案4】:

      @OP,shell 已经为您扩展了您的模式,在您的 mv 语句中,您不必再次指定 5 位数字的模式。

      for file in *_[0-9][0-9][0-9][0-9][0-9].doc
      do
        echo mv "$file" "${file%_*}.doc"
      done
      

      【讨论】:

      • 感谢 ghostdog74 和其他所有人!
      【解决方案5】:

      rename 's/_[0-9][0-9][0-9][0-9][0-9]//' *.doc

      【讨论】:

      • 我在 FreeBSD 上,所以这不起作用.. bash: /usr/local/bin/rename: Argument list too long 我不知道如何设置重命名变量
      • 想通了。对于 [A-Za-z]*_[0-9][0-9][0-9][0-9][0-9].doc 中的 i做 mv "$i" "${i/_[0-9][0-9][0-9][0-9][0-9]}";完成
      【解决方案6】:

      是的,rename 采用 perl 风格的正则表达式。做一个man rename

      【讨论】:

      • 并非总是如此。在 RH 系统上,它会进行简单的字符串替换。
      猜你喜欢
      • 1970-01-01
      • 2020-01-23
      • 2018-05-25
      • 2022-10-15
      • 1970-01-01
      • 2010-10-15
      • 2016-04-30
      • 2019-02-05
      • 2010-11-16
      相关资源
      最近更新 更多