重命名多个文件,同时在linux中保留相同的扩展名
问题描述:
我使用以下命名约定在目录中有100个文件。重命名多个文件,同时在linux中保留相同的扩展名
00XYZCD042ABCDE20141002ABCDE.XML
00XYZCC011ABCDE20141002.TXT
00XYZCB165ABCDE20141002ABCDE.TXT
00XYZCB165ABCDE20141002ABCDE.CSV
我想用重命名这些文件bash
,awk
,cut
,sed
所以我得到的输出
XYZCD042.XML
XYZCC011.TXT
XYZCB165.TXT
XYZCB165.CSV
所以基本上去除前2 0始终,然后让一切直到ABCDE启动,然后删除包括ABCDE在内的所有内容并保留文件扩展名。
请帮助 千恩万谢
答
for i in *; do
mv $i $(echo $i | sed -e 's/^00//' -e 's/ABCDE2014[^.]*//');
done
答
猛砸只:
for fn in *; do
A=${fn#00}
mv $fn ${A/ABCDE*./.}
done
在for循环的第一行剥离的00前缀,而第二行剥离的ABCDE后缀(最多点),然后执行重命名。
答
你可以试试下面的命令rename
,
rename 's/ABCDE.*(\..*)/$1/;s/^00//' *
说明:
-
s/ABCDE.*(\..*)/$1/
比赛从第一ABCDE
高达最后所有的人物和仅捕获延伸部分。然后将所有匹配的字符替换为捕获的扩展名。 -
s/^00//
然后这将删除前两个零。
答
for file in *
do
mv -- "$file" "${file:2:8}.${file#*.}"
done
它总是引用您的变量,除非你心里有一个特定的目的和理解所有的影响是很重要的。
+1,只是指出它也适用于zsh和ksh,也可能是其他一些我无法想到的。 – terdon 2014-10-03 14:10:44
如果你添加了解释,这将是一个'rockin''答案。 – dawg 2014-10-04 04:03:11
@dawg:好的,确实如此。 – nneonneo 2014-10-04 07:29:45