Ho per esempio TREE.wav, ONE.WAV. Voglio rinominarlo in tree.wav, one.wav. Come faccio a rinominare tutti i file in minuscolo?
Ho per esempio TREE.wav, ONE.WAV. Voglio rinominarlo in tree.wav, one.wav. Come faccio a rinominare tutti i file in minuscolo?
Risposte:
Se sei a tuo agio con il terminale:
cde quindi trascina nella finestra la cartella contenente i file da rinominare.lse premi invio.Incolla questo codice e premi invio:
for f in *; do mv "$f" "$f.tmp"; mv "$f.tmp" "`echo $f | tr "[:upper:]" "[:lower:]"`"; donelse premi di nuovo Invio.(Grazie a @bavarious su Twitter per alcune correzioni e grazie a John Whitley di seguito per aver reso questo più sicuro su filesystem senza distinzione tra maiuscole e minuscole.)
foo.txte FOO.TXT, questo potrebbe bloccarne uno.
mv "$f" "${f,,}"declare -l g=$f; mv "$f" "$g"
for f in *; do mv "$f" "$f.tmp"; mv "$f.tmp" "`echo $f | tr "[:upper:]" "[:lower:]"`"; done
La domanda così formulata è generale e anche importante, quindi desidero fornire una risposta più generale:
Caso più semplice (sicuro la maggior parte del tempo e su Mac OS X, ma continua a leggere):
for i in * ; do j=$(tr '[:upper:]' '[:lower:]' <<< "$i") ; mv "$i" "$j" ; done
È necessario gestire anche gli spazi nei nomi dei file (qualsiasi sistema operativo):
IFS=$'\n' ; for i in * ; do j=$(tr '[:upper:]' '[:lower:]' <<< "$i") ; mv "$i" "$j" ; done
È necessario gestire in modo sicuro i nomi di file che differiscono solo per maiuscole e minuscole in un file system sensibile al maiuscolo / minuscolo e non sovrascrivere il target (ad esempio Linux):
for i in * ; do j=$(tr '[:upper:]' '[:lower:]' <<< "$i") ; [ -e "$j" ] && continue ; mv "$i" "$j" ; done
Nota su Mac OS X:
Il filesystem del Mac non fa distinzione tra maiuscole e minuscole, preservando le maiuscole e le minuscole.
Tuttavia, non è necessario creare file temporanei, come suggerito nella risposta e nei commenti accettati, perché in primo luogo non possono esistere due nomi di file che differiscono solo per caso, rif .
Per mostrare questo:
$ mkdir test
$ cd test
$ touch X x
$ ls -l
total 0
-rw-r--r-- 1 alexharvey wheel 0 26 Sep 20:20 X
$ mv X x
$ ls -l
total 0
-rw-r--r-- 1 alexharvey wheel 0 26 Sep 20:20 x