【问题标题】:Batch renaming files in Unix在 Unix 中批量重命名文件
【发布时间】:2014-09-24 21:10:53
【问题描述】:

询问 Unix 堆栈交换,但没有答案:

我需要批量重命名文件的帮助——我浏览的其他问题并不能完全解决我的问题。我的文件的名称是不确定生成的,所以我无法预测它们将被命名。我知道它们将以NORMAL 开头并以-lib* 结尾。我想用一些字符串X 替换它们之间的所有内容。例如,

|   |   |-- NORMAL_H_LS-A7-A0CE-10A-01D-A017-09-lib1.concordant
|   |   |-- NORMAL_H_LS-A7-A0CE-10A-01D-A017-09-lib1.deletion
|   |   |-- NORMAL_H_LS-A7-A0CE-10A-01D-A017-09-lib1.divergent
|   |   |-- NORMAL_H_LS-A7-A0CE-10A-01D-A017-09-lib1.inversion
|   |   |-- NORMAL_H_LS-A7-A0CE-10A-01D-A017-09-lib1.translocation
|   |   |-- NORMAL_H_LS-A7-A0CE-10A-01D-A017-09-lib4.concordant
|   |   |-- NORMAL_H_LS-A7-A0CE-10A-01D-A017-09-lib4.deletion
|   |   |-- NORMAL_H_LS-A7-A0CE-10A-01D-A017-09-lib4.divergent
|   |   |-- NORMAL_H_LS-A7-A0CE-10A-01D-A017-09-lib4.insertion
|   |   |-- NORMAL_H_LS-A7-A0CE-10A-01D-A017-09-lib4.inversion
|   |   |-- NORMAL_H_LS-A7-A0CE-10A-01D-A017-09-lib4.translocation

所以它可能是rename "s/something/X/" 的形式,但我不知道应该是什么,因为我不知道如何使用正则表达式。感谢您的帮助!

【问题讨论】:

  • 第一个文件的预期输出是什么?

标签: regex unix rename


【解决方案1】:

这应该可行。如果打印出正确的内容,请从 mv 行中删除 echo

for i in NORMAL*lib*
do
   echo mv $i `echo $i | sed -e 's/NORMAL_.*-lib/NORMAL_X-lib/'`
done

【讨论】:

    【解决方案2】:

    您可以在要重命名的文件所在的目录下尝试以下命令。

    rename 's/^(NORMAL)(.*)(-lib.*)$/$1X$3/' *
    

    运行上述命令后NORMAL_H_LS-A7-A0CE-10A-01D-A017-09-lib1.concordant文件重命名为NORMAL-lib1.concordant同样适用于所有。

    【讨论】:

      猜你喜欢
      • 2011-04-30
      • 2012-08-30
      • 2013-12-19
      • 2013-12-16
      • 2015-09-17
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多