GNU/Linux >> Znalost Linux >  >> Linux

Linux přejmenovává soubory na velká písmena

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.


Linux
  1. Jak přejmenovat soubory v Linuxu

  2. Jak přejmenovat více souborů najednou v Linuxu

  3. Jak přejmenovat více souborů dohromady v Linuxu pomocí 3 metod

  1. Přejmenování mnoha souborů v Linuxu podle vzoru

  2. Odstranění části názvu souboru pro více souborů v systému Linux

  3. Převeďte spoustu souborů BMP do JPEG v systému Linux

  1. Najděte více souborů a přejmenujte je v Linuxu

  2. Rekurzivně přejmenovávat soubory (změnit příponu) v Linuxu

  3. Přejmenování souborů v linuxu pomocí regulárního výrazu