ファイル名内の GUID を削除する Bash シェル スクリプト

ファイル名内の GUID を削除する Bash シェル スクリプト

いくつかのファイル名からハイフンなしの GUID を置き換えようとしています。

正規表現は完了したと思いますが、エスケープが正しく行われなかったり、置換コマンドが相互に機能しなかったりするようです。

これが私の正規表現です

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

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

このようなファイル名の場合

iPhone6Plus-learn_multi_child-0dfb2dc71fe20da66ca47190d3136b12.png

この答えを見たことがあるファイル名内の部分文字列を検索して削除する Bash シェル スクリプトしかし、まったく同じではありません...

これは動作するはずだと思うのですが、エラーは表示されません。

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

シェルで文字列操作を使用する:

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正しく動作していると思われる場合は削除します。

関連情報