[英]Rename multiple files while keeping the same extension on Linux
我在目錄中有100個文件,具有以下命名約定。
00XYZCD042ABCDE20141002ABCDE.XML
00XYZCC011ABCDE20141002.TXT
00XYZCB165ABCDE20141002ABCDE.TXT
00XYZCB165ABCDE20141002ABCDE.CSV
我想使用bash
, awk
, cut
, sed
重命名這些文件,以便我得到輸出:
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.