GNU/Linux >> Linux Esercitazione >  >> Linux

Linux rinomina i file in maiuscolo

Il bash shell ha una sintassi per tradurre un nome di variabile in tutto maiuscolo.

for file in * ; do      # or *.jpg, or x*.jpg, or whatever
    mv "$file" "${file^^}"
done

Questa funzione è stata introdotta in bash versione 4.0, quindi prima verifica che la tua versione di bash lo implementa. Per evitare errori, provalo una volta sostituendo mv da echo mv , solo per assicurarti che faccia quello che vuoi.

La documentazione per questa funzione è qui, oppure digita info bash e cerca "superiore".

Probabilmente dovresti decidere cosa fare se il file di destinazione esiste già (ad esempio, se entrambi x00000.jpg e X00000.JPG esiste già), a meno che tu non sia certo che non sia un problema. Per rilevare tali collisioni di nomi, puoi provare:

ls *.txt | tr '[a-z]' '[A-Z]' | sort | uniq -c | sort -n

e cerca eventuali righe che non iniziano con 1 .


rename

Probabilmente il modo più semplice per rinominare più file è usare il rename di Perl . Per tradurre i nomi minuscoli in maiuscoli, devi:

rename 'y/a-z/A-Z/' *

Se i file sono anche nelle sottocartelle puoi usare globstar o find :

find . -maxdepth 1 -type f -iname "*.jpg" -execdir rename "y/a-z/A-Z/" {} +

Riferimenti

  • Guida:Linux rinomina più file al prompt della shell – nixCraft
  • Ulteriori informazioni su y/ , traduci invece di s sostituto.
  • DistroTube - Strumenti per rinominare i file in Linux

for f in * ; do mv -- "$f" "$(tr [:lower:] [:upper:] <<< "$f")" ; done

Non puoi rinominare i file solo da Bash, perché Bash non ha alcun comando integrato per rinominare i file. Devi usare almeno un comando esterno per questo.

Se Perl è consentito:

perl -e 'for(@ARGV){rename$_,uc}' *.jpg

Se Python è consentito:

python -c 'import os, sys; [os.rename(a, a.upper()) for a in sys.argv[1:]]' *.jpg

Se hai migliaia o più file, le soluzioni di cui sopra sono veloci e le soluzioni di seguito sono notevolmente più lente.

Se AWK, ls e mv sono consentiti:

# Insecure if the filenames contain an apostrophe or newline!
eval "$(ls -- *.jpg | awk '{print"mv -- \x27"$0"\x27 \x27"toupper($0)"\x27"}')"

Se hai molti file, le soluzioni di cui sopra non funzionano, perché *.jpg si espande in un elenco di argomenti troppo lungo (errore:Elenco di argomenti troppo lungo ).

Se tr e mv sono consentiti, quindi vedi la risposta di damienfrancois.

Se mv è consentito:

for file in *; do mv -- "$file" "${file^^}"; done

Tieni presente che questi rinominano .jpg a .JPG alla fine, ma puoi modificarli per evitarlo.


Linux
  1. Come rinominare più file insieme in Linux usando 3 metodi

  2. Rinominare molti file in Linux secondo uno schema

  3. Converti una serie di file BMP in JPEG su Linux

  4. Rinomina ricorsivamente i file (cambia estensione) in Linux

  5. Rinominare i file in Linux con una regex

Comando Rm in Linux

Come rinominare i file usando la riga di comando in Linux

Come rinominare uno o più file in Linux

8 metodi per rinominare più file contemporaneamente in Linux

Steganografia:nascondi i file all'interno delle immagini in Linux

Linux Rinomina estensione file multipli