Ich habe diese nicht getestet, also habe ich echo
eingefügt am Anfang der Befehle, damit Sie sie ausprobieren können, bevor Sie das Echo entfernen, um sie wirklich auszuführen.
for f in *v9.zip; do echo mv "${f}" "${f%v9.zip}.zip"; done
for f in *_*; do echo mv "${f}" "${f//_/-}"; done
Was Ihr drittes Problem betrifft, bin ich sicher, dass es auch gelöst werden kann, aber vielleicht hilft ein ausgefeilterer Ansatz als Einzeiler mit roher Schale, wie @tchrist erwähnt hat.
Da ist eine rename
Befehl, der mit den meisten Debian/Ubuntu-basierten Distributionen bereitgestellt wird und von Robin Barker basierend auf Larry Walls Originalcode von etwa 1998(!) geschrieben wurde.
Hier ist ein Auszug aus der Dokumentation:
"rename" renames the filenames supplied according to the rule specified as the first argument. The perlexpr argument is a Perl expression which is expected to modify the $_ string in Perl for at least some of the filenames specified. If a given filename is not modified by the expression, it will not be renamed. If no filenames are given on the command line, filenames will be read via standard input. For example, to rename all files matching "*.bak" to strip the extension, you might say rename 's/\.bak$//' *.bak To translate uppercase names to lower, you'd use rename 'y/A-Z/a-z/' *
Es verwendet Perl, sodass Sie Perl-Ausdrücke verwenden können, um das Muster abzugleichen. Tatsächlich glaube ich, dass es ähnlich wie die Skripte von tchrist funktioniert.
Ein weiteres wirklich nützliches Tool-Set zum Umbenennen von Massendateien ist die renameutils-Sammlung von Oskar Liljeblad. Der Quellcode wird von der Free Software Foundation gehostet. Zusätzlich haben viele Distributionen (insbesondere Debian/Ubuntu-basierte Distributionen) einen renameutils
Paket mit diesen Tools.
Auf einer dieser Distributionen können Sie es installieren mit:
$ sudo apt-get install renameutils
Und dann, um Dateien umzubenennen, führen Sie einfach diesen Befehl aus:
$ qmv
Es öffnet sich ein Texteditor mit der Liste der Dateien, und Sie können sie mit der Such- und Ersetzungsfunktion Ihres Editors bearbeiten.
Meine Lieblingslösung ist mein eigenes Umbenennen Skript. Das einfachste Beispiel, das Ihre Probleme abbildet, sind diese:
% rename 's/_/-/g' *
% rename 's/(\p{Lower})(\p{Upper})/$1 $2/g' *
Obwohl ich Leerzeichen in meinen Dateinamen wirklich hasse, besonders vertikale Leerzeichen:
% rename 's/\s//g' *
% rename 's/\v//g' *
und so weiter. Es basiert auf einem Skript von The Larry Wall, wurde aber um Optionen erweitert, wie in:
usage: /home/tchrist/scripts/rename [-ifqI0vnml] [-F file] perlexpr [files]
-i ask about clobbering existent files
-f force clobbers without inquiring
-q quietly skip clobbers without inquiring
-I ask about all changes
-0 read null-terminated filenames
-v verbosely says what its doing
-V verbosely says what its doing but with newlines between old and new filenames
-n don't really do it
-m to always rename
-l to always symlink
-F path read filelist to change from magic path(s)
Wie Sie sehen, kann es nicht nur die Namen von Dateien ändern, sondern auch, wo symbolische Links auf dasselbe Muster verweisen. Sie müssen keinen s///
verwenden Muster, obwohl man das oft tut.
Die anderen Tools in diesem Verzeichnis sind hauptsächlich für Unicode-Arbeiten gedacht, von denen es einige sehr nützliche gibt.