Bash
用於刪除文件名中的 guid 的 Bash shell 腳本
我正在嘗試從某些文件名中替換沒有連字元的 guid。
我認為我已經完成了正則表達式,但是我似乎無法讓轉義正確或替換命令相互配合。
這是我的正則表達式
https://regex101.com/r/SiqsjP/1
(-[0-9a-f]{32})
像這樣的文件名
iPhone6Plus-learn_multi_child-0dfb2dc71fe20da66ca47190d3136b12.png
我已經看到了這個答案Bash shell script to locate and remove substring within a filename但它並不完全相同……
我認為這應該可行,但它不會抱怨錯誤?
newname=`echo "$filename" | sed -e 's/\([0-9a-f]{32}\)\.png/\1.png/'`
在 shell 中使用字元串操作:
for name in *.png; do # remove everything after the last '-' including the dash # and add the '.png' extension back newname="${name%-*}.png" echo mv "$name" "$newname" done
這假定您要重命名的所有文件都是
.png
目前目錄中的文件。執行一次並刪除
echo
如果它似乎在做正確的事情。
在sed BRE(基本正則表達式)中,您還應該轉義大括號
{}
:newname=`echo "$filename" | sed 's/-[0-9a-f]\{32\}//g'`
要移動/重命名文件:
mv "$filename" "$newname"