
いくつかのファイル名からハイフンなしの 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
正しく動作していると思われる場合は削除します。