GNU/Linux >> Linux Esercitazione >  >> Linux

linux-shell:ridenominazione dei file al momento della creazione

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 do

    Questo 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 -r opzione che indica date per visualizzare la data del file anziché la data corrente. La specifica +"%Y%m%d_%H%M%S" dice date per 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 -n opzione a mv dice a move di non sovrascrivere mai un file esistente.

  • done

    Questo 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 exiftool comando fornisce la data in un formato come:

    $ exiftool -d "%Y%m%d_%H%M%S"  -CreateDate sample.jpg
    Create Date                     : 20121027_181338
    

    La data effettiva che vogliamo è il quarto campo nell'output.

  • Passiamo il exiftool output a awk in modo che possa estrarre il campo che vogliamo:

    awk '{print $4".jpg"}'
    

    Questo seleziona il campo della data e aggiunge anche il .jpg estensione.


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.


Linux
  1. Come trovare e ordinare i file in base alla data e all'ora di modifica in Linux

  2. Ottieni il tempo di creazione/creazione del file??

  3. Ordinare Jpg in base alla data di creazione e convertirlo in Pdf singolo?

  4. Come ottenere la data/ora di creazione del file in Bash/Debian?

  5. Copia di tutti i file all'interno delle sottodirectory e rinomina invece di sovrascrivere

Crea directory o file denominati con data/ora/mese/anno correnti

Come impostare data, ora e fuso orario in RHEL 8

11 Esempi utili di comandi data di Linux

Come impostare data e ora su Linux

L'indicatore dell'ora non mostra la data/l'ora?

Esempi di comandi data di Linux