
Ich versuche, eine GUID ohne Bindestriche aus einigen Dateinamen zu ersetzen.
Ich glaube, ich habe den regulären Ausdruck fertig, aber ich kriege es nicht hin, dass entweder die Escape-Zeichen korrekt sind oder die Ersetzungsbefehle miteinander funktionieren.
Hier ist mein regulärer Ausdruck
https://regex101.com/r/SiqsjP/1
(-[0-9a-f]{32})
Mit Dateinamen wie diesen
iPhone6Plus-learn_multi_child-0dfb2dc71fe20da66ca47190d3136b12.png
Ich habe diese Antwort gesehenBash-Shell-Skript zum Suchen und Entfernen von Teilzeichenfolgen in einem Dateinamenaber es ist nicht ganz dasselbe...
Ich denke, das sollte funktionieren, aber es wird kein Fehler gemeldet?
newname=`echo "$filename" | sed -e 's/\([0-9a-f]{32}\)\.png/\1.png/'`
Antwort1
Insed BRE(grundlegende reguläre Ausdrücke) Sie sollten auch geschweifte Klammern maskieren {}
:
newname=`echo "$filename" | sed 's/-[0-9a-f]\{32\}//g'`
So verschieben/benennen Sie die Datei:
mv "$filename" "$newname"
Antwort2
Verwenden von Stringmanipulationen in der 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
Dies setzt voraus, dass sich alle Dateien, die Sie umbenennen möchten, .png
im aktuellen Verzeichnis befinden.
Führen Sie dies einmal aus und entfernen Sie es, echo
wenn es so aussieht, als ob es das Richtige tut.