2014-10-03 96 views
1

我使用以下命名约定在目录中有100个文件。重命名多个文件,同时在linux中保留相同的扩展名

00XYZCD042ABCDE20141002ABCDE.XML 
00XYZCC011ABCDE20141002.TXT 
00XYZCB165ABCDE20141002ABCDE.TXT 
00XYZCB165ABCDE20141002ABCDE.CSV 

我想用重命名这些文件bashawkcutsed 所以我得到的输出

XYZCD042.XML 
XYZCC011.TXT 
XYZCB165.TXT 
XYZCB165.CSV 

所以基本上去除前2 0始终,然后让一切直到ABCDE启动,然后删除包括ABCDE在内的所有内容并保留文件扩展名。

请帮助 千恩万谢

回答

2
for i in *; do 
    mv $i $(echo $i | sed -e 's/^00//' -e 's/ABCDE2014[^.]*//'); 
done 
6

猛砸只:

for fn in *; do 
    A=${fn#00} 
    mv $fn ${A/ABCDE*./.} 
done 

在for循环的第一行剥离的00前缀,而第二行剥离的ABCDE后缀(最多点),然后执行重命名。

+0

+1,只是指出它也适用于zsh和ksh,也可能是其他一些我无法想到的。 – terdon 2014-10-03 14:10:44

+0

如果你添加了解释,这将是一个'rockin''答案。 – dawg 2014-10-04 04:03:11

+0

@dawg:好的,确实如此。 – nneonneo 2014-10-04 07:29:45

6

你可以试试下面的命令rename

rename 's/ABCDE.*(\..*)/$1/;s/^00//' * 

说明:

  • s/ABCDE.*(\..*)/$1/比赛从第一ABCDE高达最后所有的人物和仅捕获延伸部分。然后将所有匹配的字符替换为捕获的扩展名。
  • s/^00//然后这将删除前两个零。
4
for file in * 
do 
    mv -- "$file" "${file:2:8}.${file#*.}" 
done 

它总是引用您的变量,除非你心里有一个特定的目的和理解所有的影响是很重要的。

相关问题