Wie benenne ich alle Dateien in einem Verzeichnis rekursiv um und ändere eine Dateierweiterung in eine andere für Tausende von Dateien in Tausenden von Unterordnern? Ich sehe viele Befehle, die fast das tun, was ich will, aber nicht ganz.
find . -name "*.andnav" -exec rename .andnav .tile {} \;
syntax error at (eval 1) line 1, near "."
...
rename -nv 's/\.andnav$/\.tile/i' *.andnav
0.png.andnav renamed as 0.png.tile
linux
command-line
file-management
rename
Endolith
quelle
quelle
rename
oder Red Hatrename
?Antworten:
Herausgefunden
Natürlich entfernen Sie das -v, wenn Sie es tatsächlich tun, oder es wird Zeit verschwenden, alle Dateien anzuzeigen
quelle
So etwas wie:
quelle
Mit zsh:
Entfernen Sie das
-n
, um die Umbenennung tatsächlich durchzuführen.quelle
Ich fand diese Methode einfacher und leichter zu lesen:
Zumindest bei Ubuntu-Ableitungen übernimmt Umbenennen eine Liste von Dateien aus STDIN, wenn sich keine in der Befehlszeile befinden. Und das kann einfach getestet werden mit:
bis Sie es richtig machen.
quelle
Benennen Sie Dateien und Verzeichnisse mit
find -execdir | rename
Wenn Sie Dateien und Verzeichnisse nicht einfach mit einem Suffix umbenennen, ist dies ein gutes Muster:
Anders
-execdir
alscd
bei der Option " awesome " wird vor dem Ausführen desrename
Befehls ein Eintrag in das Verzeichnis erstellt-exec
.-depth
Stellen Sie sicher, dass die Umbenennung zuerst bei Kindern und dann bei Eltern erfolgt, um potenzielle Probleme mit fehlenden Elternverzeichnissen zu vermeiden.-execdir
ist erforderlich, weil das Umbenennen bei Eingabepfaden ohne Basisnamen nicht gut funktioniert, z. B. schlägt Folgendes fehl:Das
PATH
Hacken ist erforderlich, da-execdir
es einen sehr ärgerlichen Nachteil hat: Esfind
ist äußerst kritisch und weigert sich, irgendetwas damit zu tun,-execdir
wenn Sie relative Pfade in IhrerPATH
Umgebungsvariablen haben, z./node_modules/.bin
.Siehe auch: /ubuntu/621132/why-using-the-execdir-action-is-insecure-for-directory-which-is-in-the-path/1109378#1109378
-execdir
ist eine GNU find Erweiterung zu POSIX .rename
ist Perl-basiert und stammt aus demrename
Paket. Getestet in Ubuntu 18.10.Benennen Sie die Lookahead-Problemumgehung um
Wenn Ihre Eingabepfade nicht von stammen
find
oder wenn Sie genug von der relativen Pfadbelästigung haben, können wir einige Perl-Lookaheads verwenden, um Verzeichnisse sicher umzubenennen, wie in:Ich habe keine passende Entsprechung für
-execdir
mit gefundenxargs
: Xargs: Arbeitsverzeichnis vor der Ausführung in Dateipfad ändern?Das
sort -r
ist erforderlich, um sicherzustellen, dass Dateien nach ihren jeweiligen Verzeichnissen kommen, da längere Pfade nach kürzeren mit demselben Präfix kommen.quelle