用于删除文件名中的 guid 的 Bash shell 脚本

用于删除文件名中的 guid 的 Bash shell 脚本

我正在尝试替换某些文件名中不带连字符的 guid。

我认为我已经完成了正则表达式,但是我似乎无法获得正确的转义或替换命令来相互协作。

这是我的正则表达式

https://regex101.com/r/SiqsjP/1

(-[0-9a-f]{32})

文件名像这样

iPhone6Plus-learn_multi_child-0dfb2dc71fe20da66ca47190d3136b12.png

我看过这个答案用于查找和删除文件名中的子字符串的 Bash shell 脚本但又不太一样...

我认为这应该可行,但它不会抱怨错误?

newname=`echo "$filename" | sed -e 's/\([0-9a-f]{32}\)\.png/\1.png/'`

答案1

sed 布雷(基本正则表达式)您还应该转义大括号{}

newname=`echo "$filename" | sed 's/-[0-9a-f]\{32\}//g'`

要移动/重命名文件:

mv "$filename" "$newname"

答案2

在 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如果它看起来似乎在做正确的事情)。

相关内容