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_file
im aktuellen Verzeichnis a_file
in 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:]
tr
Befehlsreferenz 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_file
Variablen alle Dateien mit der Erweiterung .jpg zu.
Aktualisieren Sie die hinzugefügte -v
Option für den mv
Befehl gemäß den empfohlenen Anweisungen .
Es gibt ein eleganteres und allgemeineres Dienstprogramm namens prename
.
Geschrieben von Larry Wall, kommt es mit perl
so 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/rename
symbolischer 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.
find
find . -name * -type f -exec rename 'y/A-Z/a-z/' '{}' \;
find
-name
Ihr 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.
mv
damit Sie sehen, was gerade getan wird. Sie möchten möglicherweise nicht "-f" übergeben, da dies möglicherweise vorhandene Dateien