Batch umbenennen von Dateien in Kleinbuchstaben

17

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

Unamata Sanatarai
quelle

Antworten:

20

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 .

Stef K
quelle
4
Vielleicht möchten Sie "-v" übergeben, mvdamit Sie sehen, was gerade getan wird. Sie möchten möglicherweise nicht "-f" übergeben, da dies möglicherweise vorhandene Dateien
überlastet
Dies funktioniert nicht für Dateien mit Leerzeichen im Namen.
Tianxiang Xiong
Sie können den Dateinamen in Anführungszeichen setzen.
Stef K
2
Sorry, aber der Teil über ls * jpg ist eine schlechte Idee. mywiki.wooledge.org/ParsingLs Sie können dasselbe Ergebnis mit * jpg erzielen, zusammen mit der Stelle, an der Sie * hatten.
Tink
16

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.

Arielf
quelle
1

Verwenden find

find . -name * -type f -exec rename 'y/A-Z/a-z/' '{}' \;

Zum find

  • Natürlich, nachdem Sie -nameIhr Muster gelegt haben.
  • -maxdepth 0: Nur aktuelles Verzeichnis.

Zum 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.
Pablo Bianchi
quelle