Ich habe ein Verzeichnis, das nummerierte Bilddateien enthält, ungefähr so:
01.png
02.png
03.png
03.svg
04.png
05.png
06.jpg
07.png
08.png
09.png
09.svg
10.png
Manchmal gibt es mehrere Versionen einer Datei in verschiedenen Formaten (z. B. a png
und svg
Version der obigen Dateien 03
und 09
), aber die Nummern sind ansonsten aufeinanderfolgend. Normalerweise befinden sich in jedem Verzeichnis 40-80 solcher Dateien. Die Zahlen entsprechen der Reihenfolge, in der diese Bilder in einem Manuskript erscheinen (ein Word-Dokument, aber das ist nicht wichtig). Es gibt keine andere Möglichkeit, die Reihenfolge der Bilder zu bestimmen.
Wenn ich dem Manuskript ein neues Bild hinzufüge, muss ich eine Kopie des Bildes mit der richtigen Nummerierung in dieses Verzeichnis legen. Wenn das neue Bild das fünfte im Manuskript ist, muss ich die Dateien im Verzeichnis in dieses umbenennen, um Platz dafür zu schaffen:
01.png
02.png
03.png
03.svg
04.png
06.png
07.jpg
08.png
09.png
10.png
10.svg
11.png
Was ist der einfachste Weg über die Befehlszeile oder über ein Skript oder Makro, um alle Dateien ab einer bestimmten Nummer neu zu nummerieren? Ich habe eine Standard-Fedora Linux-Installation mit Bash.
Dies wäre in zsh einfacher, wo Sie verwenden können
On
Glob-Qualifikationsmerkmal zum Sortieren von Übereinstimmungen in absteigender Reihenfolge (undn
zum Verwenden der numerischen Reihenfolge, falls die Dateinamen nicht alle führende Nullen mit derselben Breite haben);(l:WIDTH::FILLER:)
Parametererweiterungsflag , um alle Zahlen auf die gleiche Breite (die Breite der größeren Zahl) aufzufüllen.In Bash ist hier ein Skript, das davon ausgeht, dass Dateien auf eine feste Breite aufgefüllt werden (andernfalls benennt das Skript die richtigen Dateien nicht um) und auf eine feste Breite aufgefüllt werden (die angegeben werden muss).
quelle
Dieses genaue Problem wird in diesem Artikel behandelt . Beachten Sie, dass Sie es ändern müssen, um die SVG- und PNG-Formate zu unterstützen, indem Sie einen zweiten MV-Schritt hinzufügen.
quelle
Einfacher:
Du wirst kriegen:
quelle
Es scheint in letzter Zeit kein großes Interesse an dieser Frage zu geben, aber sollte jemand darauf stoßen, gibt es hier drei Probleme. Eine Möglichkeit besteht darin, Dateien auszuwählen, die anhand semantischer Kriterien umbenannt werden sollen (der Bereich ist nicht lexikalisch und kann nicht durch Platzhalter oder sogar reguläre Ausdrücke angegeben werden - die Automatentheorie besagt, dass dies komplexer ist als eine NFA). Das zweite ist, wie man einen Namen ändert, indem man einen Teil davon ändert. Das dritte ist, wie man eine Namenskollision vermeidet. Ein Skript in Bash und vielen anderen Sprachen kann diese spezifische Transformation durchführen, aber die meisten von uns möchten lieber nicht jedes Mal ein Programm schreiben, wenn sie eine Reihe von Dateien umbenennen möchten. Mit meiner (kostenlosen und Open Source) rene.py können Sie tun, was Sie wollen, aber es sind zwei Aufrufe erforderlich, um das Problem der Namenskollision zu vermeiden. Zuerst
rene ?.*/#7-80 %?.* B
Erhöht alle Namen im Bereich und fügt ein Präfix von% hinzu, um vorhandene Namen zu vermeiden. Dannrene %* *
entfernt diesen Präfix aus diesen Dateien , die es haben. Ich beschreibe dies unter https://sourceforge.net/p/rene-file-renamer/discussion/examples/thread/f0fe8aa63c/quelle