【问题标题】:Renaming multiple files in Linux/Unix在 Linux/Unix 中重命名多个文件
【发布时间】:2016-10-20 16:51:14
【问题描述】:

我在一个目录中有超过一千个名称相似的文件,并希望进行重命名。文件是这种格式

GW_LGMS01-50160306185154-01375272.CDR
GW_LGMS01-50160306237154-01375272.CDR.00001    
GW_LGMS02-50160306133554-02308872.CDR
GW_LGMS02-50160306137554-02308872.CDR.00014
GW_LGMS03-50160306221836-02217475.CDR.00001
GW_LGMS03-50160306235132-02217475.CDR

我想一次重命名它们,以便在所有它们的 50160306 之前附加一个 0-。也就是说,

GW_LGMS01-0-50160306185154-01375272.CDR
GW_LGMS01-0-50160306237154-01375272.CDR.00001    
GW_LGMS02-0-50160306133554-02308872.CDR
GW_LGMS02-0-50160306137554-02308872.CDR.00014
GW_LGMS03-0-50160306221836-02217475.CDR.00001
GW_LGMS03-0-50160306235132-02217475.CDR

50160306 是所有文件的共同点。

【问题讨论】:

标签: bash unix rename


【解决方案1】:

假设 -50160306 在文件名中是唯一的,并且您使用的 shell 可以理解 ${parameter/pattern/string}(Bash、KornShell 等):

for f in *.CDR*; do
  echo mv "$f" "${f/-50160306/-0-50160306}"
done

使用echo 执行此操作,看看会发生什么,然后在您确定它正确时删除echo

如果您害怕搞砸,只需将具有新名称的文件放在新文件夹中即可:

mkdir renamed

for f in *.CDR*; do
  cp "$f" renamed/"${f/-50160306/-0-50160306}"
done

【讨论】:

  • 我无语了。言语是不够的。非常感谢。它做了我想要的事情。但是如果我的理解是正确的,echo 会显示重命名的结果?
  • 我确实很害怕,但我不得不鼓起勇气。你可能猜对了,我是一个“新手”。我还注意到重命名覆盖了旧名称。希望内容不会受到影响?
  • @oak 从第一个示例循环中删除 echo 会将文件移动到新名称(即“重命名文件”)。否则它只会显示将执行的命令。
  • 我问是因为当我使用echo 时,它会显示一行我对真实文件的重命名,但它没有替换它们,所以我编辑了脚本并删除了echo,就像你建议的那样。它进行了重命名并用新文件名替换了旧文件名。非常感谢。
  • 我想根据你给我的回复再问一个问题(新线程)。非常感谢您的回复。
【解决方案2】:

如果你不使用 bash:

#!/bin/sh
for i in * ; do
    mv "$i" "$(printf '%s' "$i" | sed 's/\(50160306.*\)/0-\1/')"
done

【讨论】:

    【解决方案3】:

    有两种rename 工具:一种是 util-linux 包的一部分,另一种是基于 Perl 的(详见this answer)。要了解您拥有哪一个,请查看手册页末尾 (man rename)。

    使用 util-linux 版本,您可以将文件重命名如下:

    rename 50160306 0-50160306 *
    

    对于基于 Perl 的版本,它将是(未经测试!)

    rename 's/50160306/0-$&/' *
    

    请注意,这些命令没有任何保护措施 - 在使用它们之前先在小样本上进行测试。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2022-01-13
      • 1970-01-01
      • 2018-10-26
      • 2014-09-14
      • 2012-06-14
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多