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.