在Unix中批量重命名文件

时间:2014-08-01 15:52:07

标签: regex unix rename

在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/"的形式,但我不知道应该是什么,因为我不知道如何使用正则表达式。谢谢你的帮助!

2 个答案:

答案 0 :(得分:2)

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

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

答案 1 :(得分:0)

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

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

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