Bash

用於刪除文件名中的 guid 的 Bash shell 腳本

  • May 21, 2017

我正在嘗試從某些文件名中替換沒有連字元的 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"

引用自:https://unix.stackexchange.com/questions/366414