Der bash
Shell hat eine Syntax zum Übersetzen eines Variablennamens in Großbuchstaben.
for file in * ; do # or *.jpg, or x*.jpg, or whatever
mv "$file" "${file^^}"
done
Diese Funktion wurde in Bash-Version 4.0 eingeführt, überprüfen Sie also zuerst, ob Ihre Version von bash
setzt es um. Um Fehler zu vermeiden, versuchen Sie es einmal, indem Sie mv
ersetzen von echo mv
, nur um sicherzustellen, dass es das tut, was Sie wollen.
Die Dokumentation für diese Funktion finden Sie hier, oder geben Sie info bash
ein und suchen Sie nach "upper".
Sie sollten wahrscheinlich entscheiden, was zu tun ist, wenn die Zieldatei bereits existiert (z. B. wenn sowohl x00000.jpg
und X00000.JPG
bereits vorhanden), es sei denn, Sie sind sich sicher, dass dies kein Problem ist. Um solche Namenskollisionen zu erkennen, können Sie Folgendes versuchen:
ls *.txt | tr '[a-z]' '[A-Z]' | sort | uniq -c | sort -n
und suchen Sie nach Zeilen, die nicht mit 1
beginnen .
rename
Der wahrscheinlich einfachste Weg, mehrere Dateien umzubenennen, ist die Verwendung von Perls rename
. Um Kleinbuchstaben in Großbuchstaben zu übersetzen, würden Sie:
rename 'y/a-z/A-Z/' *
Wenn sich die Dateien auch in Unterverzeichnissen befinden, können Sie globstar oder find
verwenden :
find . -maxdepth 1 -type f -iname "*.jpg" -execdir rename "y/a-z/A-Z/" {} +
Referenzen
- Howto:Linux Mehrere Dateien an einer Shell-Eingabeaufforderung umbenennen – nixCraft
- Weitere Informationen zu
y/
, statt s übersetzen ersetzen. - DistroTube - Tools zum Umbenennen von Dateien unter Linux
for f in * ; do mv -- "$f" "$(tr [:lower:] [:upper:] <<< "$f")" ; done
Sie können Dateien nicht nur von Bash umbenennen, da Bash keinen eingebauten Befehl zum Umbenennen von Dateien hat. Dazu müssen Sie mindestens einen externen Befehl verwenden.
Wenn Perl erlaubt ist:
perl -e 'for(@ARGV){rename$_,uc}' *.jpg
Wenn Python erlaubt ist:
python -c 'import os, sys; [os.rename(a, a.upper()) for a in sys.argv[1:]]' *.jpg
Wenn Sie Tausende oder mehr Dateien haben, sind die obigen Lösungen schnell und die folgenden Lösungen deutlich langsamer.
Wenn AWK, ls
und mv
sind erlaubt:
# Insecure if the filenames contain an apostrophe or newline!
eval "$(ls -- *.jpg | awk '{print"mv -- \x27"$0"\x27 \x27"toupper($0)"\x27"}')"
Wenn Sie viele Dateien haben, funktionieren die obigen Lösungen nicht, weil *.jpg
erweitert sich zu einer zu langen Argumentliste (Fehler:Argument list too long ).
Wenn tr
und mv
erlaubt sind, dann siehe die Antwort von damienfrancois.
Wenn mv
ist erlaubt:
for file in *; do mv -- "$file" "${file^^}"; done
Bitte beachten Sie, dass diese .jpg
umbenennen bis .JPG
am Ende, aber Sie können sie ändern, um dies zu vermeiden.