Gibt es eine Möglichkeit, alle Dateien in einem Verzeichnis in Kleinbuchstaben | Großbuchstaben umzubenennen ?
Ich suche einen Oneliner- Befehl.
Ich habe TotalCommander geliebt alt+f7, jetzt brauche ich diese Funktionalität im Terminal
Gibt es eine Möglichkeit, alle Dateien in einem Verzeichnis in Kleinbuchstaben | Großbuchstaben umzubenennen ?
Ich suche einen Oneliner- Befehl.
Ich habe TotalCommander geliebt alt+f7, jetzt brauche ich diese Funktionalität im Terminal
Antworten:
Benennen Sie jede Datei a_fileim aktuellen Verzeichnis a_filein Kleinbuchstaben um.
for a_file in *;do mv -v "$a_file" `echo "$a_file" | tr [:upper:] [:lower:]` ;done;
Für Großbuchstaben kehren Sie die Argumente um zu [:lower:] [:upper:]
trBefehlsreferenz Link
Aktualisieren
Damit kann noch mehr Kontrolle *durch ersetzt werden ls.
Zum Beispiel kann in einem Verzeichnis mit 1.txt, 2.txt, 3.txt, 1.jpg, 2.jpg und 3.jpg Folgendes verwendet werden, um nur * .jpg-Dateien zu filtern ls:
for a_file in $(ls *.jpg);do mv -v $a_file `echo $a_file | tr [:upper:] [:lower:]` ;done;
Der obige Code weist der a_fileVariablen alle Dateien mit der Erweiterung .jpg zu.
Aktualisieren Sie die hinzugefügte -vOption für den mvBefehl gemäß den empfohlenen Anweisungen .
Es gibt ein eleganteres und allgemeineres Dienstprogramm namens prename.
Geschrieben von Larry Wall, kommt es mit perlso ist es sehr wahrscheinlich bereits auf Ihrem System als /usr/bin/prename(wenn Sie Setup - Alternativen haben , ist ebenfalls verfügbar sein kann als /usr/bin/renamesymbolischer Link über / etc / Alternativen prename)
Mit diesem Befehl können Sie mehrere Dateien in einem Befehl umbenennen, indem Sie einen beliebigen Perl-Ausdruck bereitstellen (einschließlich, aber nicht beschränkt auf Substitution s///oder Char-Transliteration tr///):
Beispiele:
# Lowercase all *.JPG filenames:
prename tr/A-Z/a-z/ *.JPG
# Change any 'No' in a filename to a 'Yes':
prename s/No/Yes/g *No*
# increment first sequence of digits in a filename by 3:
prename 's/([0-9]+)/$1+3/e' *[0-9]*
# If a file contains 'aaa', append '.bak' to its name
prename 'if (/aaa/) {$_ .= ".bak"}' *
Und so weiter.
Ein weiterer Vorteil von prename ist, dass es Sie schützt, wenn Sie eine Datei in einen vorhandenen Dateinamen umbenennen.
man prename für mehr Details.
findfind . -name * -type f -exec rename 'y/A-Z/a-z/' '{}' \;
find-nameIhr Muster gelegt haben.-maxdepth 0: Nur aktuelles Verzeichnis.rename-n, -nono: Keine Aktion: Namen der umzubenennenden Dateien drucken, aber nicht umbenennen.y/source/dest/: Transkribieren Sie die Zeichen im Musterbereich, die in der Quelle erscheinen, in das entsprechende Zeichen in dest.
mvdamit Sie sehen, was gerade getan wird. Sie möchten möglicherweise nicht "-f" übergeben, da dies möglicherweise vorhandene Dateien