Beachten Sie, dass Sie das von Debian und Derivaten (Ubuntu, Mint,…) verteilte Perl-Skript verwendenrename . Andere Linux-Distributionen liefern einen völlig anderen und wesentlich weniger nützlichen Befehl namens rename.
y/A-Z/a-z/übersetzt jedes Zeichen im Bereich Adurch Zin das entsprechende Zeichen im Bereich adurch z, dh ASCII-Großbuchstaben in den entsprechenden Kleinbuchstaben. Verwenden Sie, um die entgegengesetzte Übersetzung durchzuführen y/a-z/A-Z/. Eine andere Möglichkeit, denselben Befehl zu schreiben, ist rename '$_ = uc($_)' *- ucdie Funktion u pper c ase, und der renameBefehl benennt Dateien basierend auf der in die $_Variable vorgenommenen Umwandlung um .
rename '…' *benennt nur Dateien im aktuellen Verzeichnis um, da dies *übereinstimmt. Punktedateien (Dateien, deren Name mit beginnt .) werden ebenfalls übersprungen.
Wenn Sie Dateien im aktuellen Verzeichnis und in Unterverzeichnissen rekursiv umbenennen möchten, können Sie mit dem findBefehl das aktuelle Verzeichnis rekursiv durchlaufen. Hier gibt es eine Schwierigkeit: Wenn Sie aufrufen rename, werden sowohl das Verzeichnis als auch der Basisname umbenannt. Wenn Sie renameein Verzeichnis aufrufen, bevor Sie es erneut verwenden ( find -exec rename … {} \;), findwird dies verwirrt, da ein Verzeichnis gefunden wurde, dieses Verzeichnis jedoch nicht mehr vorhanden ist, wenn versucht wird, in dieses Verzeichnis abzusteigen. Sie können dies umgehen find, indem Sie anweisen , ein Verzeichnis zu durchlaufen, bevor Sie darauf reagieren. Am Ende versuchen Sie jedoch, es umzubenennen foo/bar, FOO/BARaber das Verzeichnis FOOexistiert nicht.
Eine einfache Möglichkeit, diese Schwierigkeit zu vermeiden, besteht darin, den Umbenennungsbefehl nur auf den Basisnamen des Pfads anzuwenden. Der reguläre Ausdruck ([^/]*\Z)entspricht dem letzten Teil des Pfads, der kein a enthält /.
find . -depth -exec rename 's!([^/]*\Z)!uc($1)!e' {} +
Die Shell zsh bietet bequemere Funktionen zum Umbenennen - noch kryptischer als Perl, aber knapper und oft einfacher zu komponieren.
Die Funktion zmvbenennt Dateien basierend auf Mustern um. Führen Sie es autoload -U zmveinmal aus, um es zu aktivieren (setzen Sie diese Zeile in Ihre .zshrc).
Im ersten Argument zu zmv(dem zu ersetzenden Muster) können Sie die leistungsstarken Platzhaltermuster von zsh verwenden . Im zweiten Argument zu zmv(dem Ersatztext) können Sie die Parametererweiterungsfunktionen einschließlich der Verlaufsmodifikatoren verwenden .
zmv -w '**/*' '$1$2:u'
Erläuterung:
-w - Automatische Zuweisung numerischer Variablen zu jedem Platzhaltermuster
**/*- Alle Dateien in Unterverzeichnissen rekursiv ( **/entspricht 0, 1 oder mehr Ebenen von Unterverzeichnissen)
$1 - die erste numerische Variable, die hier mit dem Verzeichnisteil jedes Pfads übereinstimmt
$2:u- die zweite numerische Variable, die hier mit dem :uBasisnamen jedes Pfads übereinstimmt, mit dem Modifikator, um den Wert in Großbuchstaben umzuwandeln
Als zusätzlichen Bonus werden die Einstellungen für das Gebietsschema der Umgebung berücksichtigt.
Wenn Sie sich bei einem von zmvIhnen geschriebenen Befehl nicht sicher sind , können Sie die -nOption übergeben, um zu drucken, was der Befehl tun würde, und nichts ändern. Überprüfen Sie die Ausgabe, und führen Sie den Befehl erneut aus, wenn er das tut, was Sie möchten, ohne -ntatsächlich zu handeln.
rename 'y/a-z/A-Z/' *Sie das bekommen, was Sie wollen , wenn Sie es versuchen . Seien Sie vorsichtig, wo Sie es testen.