簡體   English   中英

重命名多個文件,同時在Linux上保持相同的擴展名

[英]Rename multiple files while keeping the same extension on Linux

我在目錄中有100個文件,具有以下命名約定。

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

我想使用bashawkcutsed重命名這些文件,以便我得到輸出:

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

所以基本上,總是刪除前兩個0,然后保留所有內容直到ABCDE啟動,然后刪除包括ABCDE在內的所有內容並保留文件擴展名。

僅限Bash:

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

除非您有特定的目的並理解所有效果,否則始終引用您的變量非常重要。

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM