bash
shell má syntaxi pro překlad názvu proměnné na velká písmena.
for file in * ; do # or *.jpg, or x*.jpg, or whatever
mv "$file" "${file^^}"
done
Tato funkce byla představena ve verzi bash 4.0, takže nejprve ověřte, že vaše verze bash
implementuje to. Abyste se vyhnuli chybám, zkuste to jednou nahradit mv
podle echo mv
, jen abyste se ujistili, že bude dělat to, co chcete.
Dokumentace k této funkci je zde nebo zadejte info bash
a vyhledejte "upper".
Pravděpodobně byste se měli rozhodnout, co dělat, pokud cílový soubor již existuje (řekněme, pokud oba x00000.jpg
a X00000.JPG
již existuje), pokud si nejste jisti, že to není problém. Chcete-li detekovat takové kolize jmen, můžete zkusit:
ls *.txt | tr '[a-z]' '[A-Z]' | sort | uniq -c | sort -n
a vyhledejte všechny řádky, které nezačínají 1
.
rename
Pravděpodobně nejjednodušší způsob, jak přejmenovat více souborů, je použití rename
Perlu . Chcete-li přeložit názvy malých písmen na velká, postupujte takto:
rename 'y/a-z/A-Z/' *
Pokud jsou soubory také v podadresářích, můžete použít globstar nebo find
:
find . -maxdepth 1 -type f -iname "*.jpg" -execdir rename "y/a-z/A-Z/" {} +
Odkazy
- Jak na to:Linux přejmenovat více souborů najednou – nixCraft
- Další informace o
y/
, přeložte místo s náhradníka. - DistroTube – Nástroje pro přejmenování souborů v systému Linux
for f in * ; do mv -- "$f" "$(tr [:lower:] [:upper:] <<< "$f")" ; done
Nemůžete přejmenovat soubory pouze z Bash, protože Bash nemá žádný vestavěný příkaz pro přejmenování souborů. K tomu musíte použít alespoň jeden externí příkaz.
Pokud je povolen Perl:
perl -e 'for(@ARGV){rename$_,uc}' *.jpg
Pokud je povolen Python:
python -c 'import os, sys; [os.rename(a, a.upper()) for a in sys.argv[1:]]' *.jpg
Pokud máte tisíce nebo více souborů, výše uvedená řešení jsou rychlá a níže uvedená jsou znatelně pomalejší.
Pokud AWK, ls
a mv
jsou povoleny:
# Insecure if the filenames contain an apostrophe or newline!
eval "$(ls -- *.jpg | awk '{print"mv -- \x27"$0"\x27 \x27"toupper($0)"\x27"}')"
Pokud máte mnoho souborů, výše uvedená řešení nefungují, protože *.jpg
expanduje na příliš dlouhý seznam argumentů (chyba:Seznam argumentů je příliš dlouhý ).
Pokud tr
a mv
jsou povoleny, pak viz odpověď damienfrancoise.
Pokud mv
je povoleno:
for file in *; do mv -- "$file" "${file^^}"; done
Vezměte prosím na vědomí, že tyto přejmenují .jpg
na .JPG
na konci, ale můžete je upravit, abyste tomu zabránili.