我是 bash 中文本處理的新手,并且有數百個名稱不同的檔案:
TS_01_001_21.0.tif
TS_10_005_-21.0.tif
TS_21_010_-45.0.tif
我想洗掉中間部分和擴展名,使檔案看起來像:
TS_01_21.0
TS_10_-21.0
TS_21_-45.0
到目前為止,我有:
for f in *.tif;do
mv "${f}" "${f%.tif}"
done
要洗掉擴展名,但我不知道如何洗掉中間三個字符。任何幫助將不勝感激,謝謝!
uj5u.com熱心網友回復:
假設:
middle總是表示3 digits加下劃線 (_)- 只有一個(aka
middle)出現3 digits加下劃線(_) - 擴展總是
.tif
使用一對引數替換來洗掉不需要的字符的一個想法:
for f in TS_01_001_21.0.tif TS_10_005_-21.0.tif TS_21_010_-45.0.tif
do
newf="${f//[0-9][0-9][0-9]_/}"
newf="${newf/.tif/}"
if [[ -f "${newf}" ]]
then
# addressing comment/question re: what happens if two source files are modified to generate the same new file name
echo "WARNING: ${newf} already exists. [ source: ${f} ]"
else
echo mv "${f}" "${newf}"
fi
done
這會產生:
mv TS_01_001_21.0.tif TS_01_21.0
mv TS_10_005_-21.0.tif TS_10_-21.0
mv TS_21_010_-45.0.tif TS_21_-45.0
一旦對結果滿意,OP 可以洗掉echo以執行實際的檔案重命名。
轉載請註明出處,本文鏈接:https://www.uj5u.com/caozuo/520098.html
標籤:重击壳改名MV
上一篇:在Bash中組合字串陣列
下一篇:使用Bash更改XML檔案
