重命名多个文件,同时在Linux上保持相同的扩展名

时间:2014-10-03 11:53:24

标签: linux bash file awk rename

我在目录中有100个文件,具有以下命名约定。

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

我想使用bashawkcutsed重命名这些文件,以便获得输出:

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

所以基本上,总是删除前两个0,然后保留所有内容直到ABCDE启动,然后删除包括ABCDE在内的所有内容并保留文件扩展名。

4 个答案:

答案 0 :(得分:6)

仅限Bash:

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

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

答案 1 :(得分:6)

您可以尝试以下rename命令,

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

<强>解释

  • s/ABCDE.*(\..*)/$1/匹配从第一个ABCDE到最后一个的所有字符,并仅捕获扩展部分。然后,所有匹配的字符将替换为捕获的扩展名。
  • s/^00//然后这将删除前两个零。

答案 2 :(得分:4)

for file in *
do
    mv -- "$file" "${file:2:8}.${file#*.}"
done

始终引用您的变量非常重要,除非您有特定的目的并理解所有效果。

答案 3 :(得分:2)

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