我在目录中有100个文件,具有以下命名约定。
00XYZCD042ABCDE20141002ABCDE.XML
00XYZCC011ABCDE20141002.TXT
00XYZCB165ABCDE20141002ABCDE.TXT
00XYZCB165ABCDE20141002ABCDE.CSV
我想使用bash
,awk
,cut
,sed
重命名这些文件,以便获得输出:
XYZCD042.XML
XYZCC011.TXT
XYZCB165.TXT
XYZCB165.CSV
所以基本上,总是删除前两个0,然后保留所有内容直到ABCDE启动,然后删除包括ABCDE在内的所有内容并保留文件扩展名。
答案 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