Ich habe Verzeichnis sagen, /var/tmp/abc
die 4 Dateien hat:
12345-ram-3e3r5-io9490-89adu9.csv
45434-dam-qwe35-to9490-43adu9.csv
11234-cam-yy3r5-ro9490-85adu9.csv
14423-sam-hh3r5-uo9490-869du9.csv
Ich möchte alle CSV-Dateien auf kürzestem Weg (wahrscheinlich einzeilig) umbenennen (alle Dateien finden und umbenennen):
XXXXX-ram-3e3r5-io9490-89adu9.csv
XXXXX-dam-qwe35-to9490-43adu9.csv
XXXXX-cam-yy3r5-ro9490-85adu9.csv
XXXXX-sam-hh3r5-uo9490-869du9.csv
rename
. Ich nehme an, das ist Larry Wallsrename
, aus demrename
Paket in Debian und Derivat (und IIRCprename
auf Systemen der RedHat-Überzeugung). Ein sehr nützliches Werkzeug.perl-rename
in arch linuxverbose
Flags wird jedoch nichts ausgegeben und die Dateinamenänderungen werden nicht ausgeführt, obwohl der aktuelle Pfad dies enthält Dateien mit ähnlichen Namen12345_foo.csv
. Muss ich zusätzliche Aufgaben ausführen, damit es funktioniert (derzeit unter Fedora 30)? Es ist ein saubererer Ansatz als das Schleifen. Danke im Voraus!rename
oder benutztprename
? Siehe meinen Kommentar oben.man {the command}
listet die Autoren am Ende auf.rename
Befehl. siehe unix.stackexchange.com/a/238862/135943Versuchen:
Wie es funktioniert:
for f in *.csv; do
Dies startet eine Schleife über alle
*.csv
Dateien.mv -i -- "$f" "XXXXX-${f#*-}"
Hierdurch werden die Dateien nach Belieben umbenannt und vor dem Überschreiben einer Datei interaktiv gefragt.
done
Dies markiert das Ende der Schleife.
Beispiel:
quelle
Die kleine Herausforderung, die Sie gepostet haben, hat mir gefallen. Hier ist meine Lösung. Ich gehe davon aus, dass alle Ihre Dateien mit 5 numerischen Zeichen beginnen. Verwenden Sie daher den Befehl cut , um die anfänglichen numerischen Dateien durch "XXXXX" zu ersetzen.
Unten die Dateien vor dem Befehl.
Unten das Einzeiler-Kommando.
Unten die Dateien nach dem Befehl.
Ist es das, wonach du suchst? :)
Verweise:
Durchlaufen der Befehlsausgabe in Bash
Teilstrings in bash
quelle
no need to fork a new process for each
?cut
ist ein separates Binary (/usr/bin/cut
), dessen Ausführung mehr Ressourcen verbraucht als die Verwendung von Shell-Built-Ins.keine Gabeln:
Wenn Sie eine Shell-Schleife verwenden, werden die
mv
Gabeln einmal pro Datei ausgegeben. Perlsrename
Befehl funktioniert nicht.(Perls Befehl zum Umbenennen unterliegt einigen Einschränkungen, in diesem speziellen Fall gelten diese jedoch nicht.)
Wie für den
rename
Befehl früher gezeigt, ja , das funktioniert, aber dann haben Sie alles , was Verwirrung zwischen zwei verschiedenen Arten von Umbenennungs und so weiter. Wenn Sie die richtige haben, großartig, aber wenn nicht, funktioniert dies auch.Wenn Sie den Befehl perl-rename nicht haben und nicht installieren können, können Sie dies einfach tun:
Wie Sie sehen, wird dabei dieselbe Substitution verwendet, die in der oberen Antwort angegeben ist. Natürlich ist die Perl-Umbenennungs hat andere Schnickschnack (die obere Antwort erwähnt,
-n
schon, dann gibt es-0
,-f
und so weiter), und je mehr von ihnen müssen Sie auf diese Weise die mehr sollten Sie , dass installieren stattdessen Ihre eigenen Walz .quelle
rename
Befehl ( Top-Antwort , verwendet auch Perl). Vielleicht sollten Sie der Antwort eine etwas ausführlichere Erklärung hinzufügen, als nur "no forks".