一部のファイル名にハイフンのない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
正しい操作を実行していると思われる場合)。