Umbenennen einer Reihe von Dateien, aber Beibehalten des Nummernteils

Umbenennen einer Reihe von Dateien, aber Beibehalten des Nummernteils

Ich habe einen Haufen Dateien wie diese:

pic100.png
pig102.png
box103a.png
superb103b.png
px103c.png
rotor110 - new.png
ready1323 (yellow car).png
motorhome1036x red circle.png
...

Sie können also feststellen, dass Dateien aus drei Teilen bestehen können:

  • ein Präfix, das eine beliebige Zeichenfolge sein kann
  • eine Zahl, die ein Suffix wie „a“, „b“ usw. enthalten kann.
  • eine optionale Endung, die immer eine Zeichenfolge ist und mit einem Leerzeichen beginnt, wie „(gelbes Auto)“, „roter Kreis“ usw.

Was ich brauche, ist Folgendes: Ich möchte in einem Vorgang:

  • Ändern Sie das Präfix in das gewünschte
  • Behalten Sie die Nummer und das Suffix (a, b, c...), falls vorhanden
  • das Ende loswerden

anhand des ersten Beispiels möchte ich das vielleicht umwandeln in

object100.png
object102.png
object103a.png
object103b.png
object103c.png
object110.png
object1323.png
object1036x.png

wie mache ich das? Wie Sie sehen, behalte ich nur die Nummer und das Suffix „a, b, c“, wenn eines vorhanden ist ...

Der Einfachheit halber muss der Befehl für alle Dateien in einem bestimmten Verzeichnis funktionieren.

Dank im Voraus.

Antwort1

Eine Standardmethode hierfür besteht darin, sed zum Generieren des neuen Dateinamens zu verwenden:

ls | while read file; do
     new=$( echo $file | sed 's/[^0-9]*\([^ ]*\)[^.]*\(\..*\)*/object\1\2/' )
     mv "$file" "$new"
done

Bevor Sie das tun, sollten Sie die Befehle überprüfen, um sicherzustellen, dass sie das gewünschte Ergebnis erzielen, und eine Sicherungskopie erstellen.

verwandte Informationen