Bash-Shell-Skript zum Entfernen einer GUID innerhalb eines Dateinamens

Bash-Shell-Skript zum Entfernen einer GUID innerhalb eines Dateinamens

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, .pngim aktuellen Verzeichnis befinden.

Führen Sie dies einmal aus und entfernen Sie es, echowenn es so aussieht, als ob es das Richtige tut.

verwandte Informationen