Ich versuche , Dateien in Form von Namen umbenennen splitfile[a-z]
zu splitfile[1-26].csv
, die ich umbenennen will , ist splitfilea
zu splitfile1.csv
und so weiter.
Ich habe den folgenden Befehl ausprobiert:
mv splitfile[a-z] splitfile[1-26].csv
aber es funktioniert nicht. Bitte helfen Sie mir, während ich es mit for-Schleife versuche.
splitfile01.csv
. Die Art und Weise Sie vorschlagen, gewöhnliche Sortierung in der Reihenfolge gesetzt werdensplitfile1
,splitfile10
,splitfile11
, ...splitfile19
,splitfile2
,splitfile20
, ... das ist oft unbequem. Insbesonderecat splitfile*.csv
werden sie dadurch nicht mehr in der richtigen Reihenfolge wieder kombiniert.Antworten:
Mit new können
bash
Sie die Klammererweiterung des Formulars verwenden{a..z}
:quelle
in file[a-z]
ist Arbeit auch, aber unsortiert , so kann es ausgetrickst werden von$(echo file[a-z] | sort)
file*
stattfile{a..z}
? Ich denke, es sollte funktionieren ...do mv "$f.csv"
diesdo mv "$f"
der Frage entsprechen sollte.file*
dass das auch passenfile_something_not_a_single_letter
würde. Auch muss esmv "$f.csv"
stattmv "$f"
, weilfile{a..z}
Übereinstimmungenfilea
, ohne Suffix sein.csv
.Wenn Sie das
perl
Dienstprogrammrename
(manchmal aufgerufenprename
) haben, können Sie es zum Umbenennen Ihrer Dateien verwendenDies bedeutet, dass der letzte Buchstabe Ihrer Dateinamen übereinstimmt
splitfile?
, das Zeichen in sein ASCII-Ordnungsäquivalent konvertiert wird (dh a = 97, b = 98, ...), 96 subtrahiert und der übereinstimmende Buchstabe durch das Ergebnis ersetzt wird. Für alle Dateinamen, bei denen diese Ersetzung erfolgreich angewendet wurde, wird die Zeichenfolge ".csv" angehängt.Der obige Befehl ändert nicht Ihre tatsächlichen Dateien (das ist, was das
-n
Flag tut), sondern druckt nur das, was es tun würde. Führen Sie es einmal aus, überprüfen Sie die Ausgabe und führen Sie es, wenn es korrekt ist, erneut ohne aus-n
.quelle
Mit
zsh
braucht man nicht um eine Schleife zu verwenden, nur einezmv
Funktion:Oder wenn nicht alle
file[a-z].csv
existieren können:quelle
Dieses
sh
Skript benennt Dateien korrekt um, auch wenn Dateien in dera-z
Sequenz fehlen :quelle
Dies ist eine Möglichkeit, dies mit einer POSIX-Shell zu tun, vorausgesetzt, alle Dateien sind in der folgenden
a-z
Reihenfolge vorhanden:quelle
perl
scheint nur das Skript das zu erklären.Eine andere ziemlich tragbare Lösung ...
Nachdem ich die
set
obige Zeile ausgeführt habe, habe ich einen Testsatz für diese Lösung wie ...Das überspringt iterativ alle zwei Buchstaben für jeweils zwei Buchstaben ... wenn das Sinn macht. Die Ergebnisse waren:
Und dann habe ich es getestet ...
quelle
Hier ist ein alternativer Vorschlag, der fehlende Dateien nicht unterstützt, aber ich hatte das Bedürfnis, eine "funktionalere" Lösung auszuprobieren, die mit Tupeln funktioniert:
Mit den obigen
paste
Anweisungen werden die Argumenttupel (durch Leerzeichen getrennt) erstellt und an eine vorgefertigte Funktion übergeben, die sie dann als nummerierte Argumente aufnimmt.quelle