Grazie a @John1024 !
Avevo bisogno di rinominare i file con estensioni diverse nello stesso tempo, in base alla data dell'ultima modifica :
for f in *; do
fn=$(basename "$f")
mv "$fn" "$(date -r "$f" +"%Y-%m-%d_%H-%M-%S")_$fn"
done
"DSC_0189.JPG" ➜ "2016-02-21_18-22-15_DSC_0189.JPG"
"MOV_0131.avi" ➜ "2016-01-01_20-30-31_MOV_0131.avi"
Se non vuoi mantenere il nome file originale :
mv "$fn" "$(date -r "$pathAndFileName" +"%Y-%m-%d_%H-%M-%S")"
Spero che aiuti i niubbi come me!
Denominazione basata sulla data del file system
Nella shell Linux:
for f in *.jpg
do
mv -n "$f" "$(date -r "$f" +"%Y%m%d_%H%M%S").jpg"
done
Spiegazione :
-
for f in *.jpg doQuesto avvia il ciclo su tutti i file jpeg. Una caratteristica di questo è che funzionerà con tutti i nomi di file, anche quelli con spazi, tabulazioni o altri caratteri difficili nei nomi.
-
mv -n "$f" "$(date -r "$f" +"%Y%m%d_%H%M%S").jpg"Questo rinomina il file. Utilizza il
-ropzione che indicadateper visualizzare la data del file anziché la data corrente. La specifica+"%Y%m%d_%H%M%S"dicedateper formattarlo come specificato.Il nome del file,
$f, è racchiuso tra virgolette doppie ovunque venga utilizzato. Questo assicura che nomi di file strani non causino errori.Il
-nopzione amvdice a move di non sovrascrivere mai un file esistente. -
doneQuesto completa il ciclo.
Per un uso interattivo, potresti preferire che il comando sia tutto su una riga. In tal caso, usa:
for f in *.jpg; do mv -n "$f" "$(date -r "$f" +"%Y%m%d_%H%M%S").jpg"; done
Denominazione basata sulla data di creazione EXIF
Per denominare il file in base alla data di creazione EXIF (invece della data del file system), abbiamo bisogno di exiftool o equivalente:
for f in *.jpg
do
mv -n "$f" "$(exiftool -d "%Y%m%d_%H%M%S" -CreateDate "$f" | awk '{print $4".jpg"}')"
done
Spiegazione :
Quanto sopra è abbastanza simile ai comandi per la data del file ma con l'uso di exiftool e awk per estrarre l'immagine EXIF Create Date.
-
Il
exiftoolcomando fornisce la data in un formato come:$ exiftool -d "%Y%m%d_%H%M%S" -CreateDate sample.jpg Create Date : 20121027_181338La data effettiva che vogliamo è il quarto campo nell'output.
-
Passiamo il
exiftooloutput aawkin modo che possa estrarre il campo che vogliamo:awk '{print $4".jpg"}'Questo seleziona il campo della data e aggiunge anche il
.jpgestensione.
Prova questo
for file in `ls -1 *.jpg`; do name=`stat -c %y $file | awk -F"." '{ print $1 }' | sed -e "s/\-//g" -e "s/\://g" -e "s/[ ]/_/g"`.jpg; mv $file $name; done
Anche se potrebbe esserci un modo più semplice.