GNU/Linux >> Linux Esercitazione >  >> Ubuntu

Come rinominare più foto e video in base ai dati Exif?

Importo spesso foto e video (per lo più con estensioni JPG e MOV) da fotocamere digitali e tablet al mio PC e, idealmente, vorrei vederli ordinati in base a data e ora di acquisizione già presenti nei loro dati EXIF. E da qui il mio desiderio di rinominarli tutti preferibilmente utilizzando un semplice Script Nautilus inserendo preferibilmente la data e l'ora prima di ogni nome di file.

Finora sono riuscito solo a mettere insieme il seguente Nautilus Script, che credo sia tutt'altro che perfetto:

for i in *.*
do
mv -i "$i" "$(exiftool -CreateDate "$i" | awk -F ': ' '{print $2}')_"$i"" 
done

Quello che non mi piace in questo metodo di ridenominazione sono i due punti utilizzati nei timbri di data e ora EXIF (ad es. “2013:09:03 20:55:09_IMG_0108.JPG”) che potrebbero creare problemi durante il trasferimento successivo di questi file in altri ambienti (ad es. Windows).

Questo comando (usando exiv2 invece di exiftool ) consente comodamente la manipolazione di data e ora, ma il suo svantaggio è che non funziona sui file video (ad es. MOV) :

exiv2 -k -r '%Y-%m-%d_%H-%M-%S_:basename:' rename "$i"

Quindi spero che qualcuno possa trovare una soluzione migliore. E sarebbe magico se riuscisse a convertire anche i nomi dei file e le estensioni originali in minuscolo!

Risposta accettata:

Quello che non mi piace in questo metodo di ridenominazione sono i due punti utilizzati nei timbri di data e ora EXIF ​​(ad es. "2013:09:03 20:55:09_IMG_0108.JPG") che potrebbero creare problemi durante il trasferimento di questi file in un secondo momento in altri ambienti ( es. Windows).

Puoi eseguire lo schema di denominazione tramite sed , per sostituire i due punti con trattini e spazi con trattini bassi, in questo modo:

mv -i "$i" "$(exiftool -CreateDate "$i" | awk -F ': ' '{print $2}' | sed -e 's/:/-/g' -e 's/ /_/g')_$i"

Per quanto riguarda il minuscolo, puoi usare rename :

rename 's/(.*)/\L$1/' file.JPG
##  or
rename 's/(.*)/\L$1/' *.*

Oppure potresti farlo all'interno del tuo script usando sed , come in:

j=$(echo "$i" | sed -e 's/\(.*\)/\L\1/')

…e poi usa il $j variabile al posto del $i finale del tuo mv linea. Questo modo sed è leggermente più portabile (se questo è importante per te) poiché diverse distribuzioni Linux hanno comandi di ridenominazione diversi, mentre sed è universale.

Oppure, in alternativa, lo script può essere modificato come segue per eseguire la conversione del nome del file in minuscolo all'inizio utilizzando tr invece:

for arg 
do
  tmp="$(echo "$arg" | tr '[A-Z]' '[a-z]')"
  mv -i "$arg" "$(exiftool -CreateDate "$arg" | awk -F ': ' '{print $2}' | sed -e 's/:/-/g' -e 's/ /_/g')_$tmp"
done

Per eseguire comandi leggermente diversi per diversi tipi di file, in questo script è possibile utilizzare un'istruzione bash case. Ad esempio:

#! /usr/bin/env bash
for filename in ./*
do
  tmp="$(echo "$filename" | tr '[A-Z]' '[a-z]')"
  case "$filename" in
    *.MOV|*.mov) 
      mv -i "$filename" "$(exiftool -a -s -CreateDate-tur "$filename" | awk -F ': ' '{print $2}' | sed -e 's/\-[0-9][0-9]\:00//g' -e 's/\+[0-9][0-9]\:00//g' -e 's/:/-/g' -e 's/ /_/g')_$tmp"
      ;;
    *.JPG|*.jpg)
      mv -i "$filename" "$(exiftool -a -s -CreateDate "$filename" | awk -F ': ' '{print $2}' | sed -e 's/:/-/g' -e 's/ /_/g')_"$tmp""
      ;;
    *)
      echo 'Not a *.jpg or a *.mov!'
      ;;
  esac
done

In questo esempio, la ridenominazione di file MOV con timestamp CreateDate QUALSIASI NUMERO di ore DOPO O PRIMA dei file JPG viene regolata utilizzando un altro (-tur) dati EXIF ​​e rimuovendo il suffisso della differenza di orario, e potrebbe essere necessario modificare -tur parte in base alla posizione impostata nel sistema.


Ubuntu
  1. Perché i dati sono importanti e come proteggerli

  2. Come trovare e rimuovere le foto duplicate in Linux

  3. Come rinominare più file usando Trova?

  4. Come rinominare un utente in modo sicuro?

  5. Come organizzare/ordinare le immagini per dati immagine Exif?

Come rinominare file e directory in Ubuntu 20.04

Fwbackups – Come installare ed eseguire il backup dei dati su Ubuntu

Come unire i dati in Linux

Come installare ELK Stack (Elasticsearch, Logstash e Kibana) su Ubuntu 20.04

Come rimuovere i dati di file Exif con ExifTool in Ubuntu 20.04

Come rinominare file e directory in Linux