Questo fa uso delle informazioni Exif memorizzate all'interno del file immagine JPEG, alcune delle quali sono indicizzate da Spotlight, tuttavia consulta la sezione Note: di seguito.
Ecco un semplice esempio di script bash per preformare un'azione su qualsiasi file di immagine JPEG trovato nella directory di lavoro che è stata presa su un iPhone.
Copia e incolla il codice seguente in un file di testo del piano, senza un'estensione, e da un Terminale, rendilo eseguibile usando chmod +x filename
dove " filename " è il nome che hai dato allo script file. Quindi posizionalo in una directory che è nella tua $PATH
, ad esempio /usr/local/bin
, altrimenti dovrai fornire il percorso completo al file di script sulla riga di comando per eseguirlo.
Ora in un terminale usa il comando cd
per passare alla directory di destinazione che contiene i file di immagine JPEG su cui vuoi agire, diventa la directory di lavoro di destinazione e digita il nome che hai dato allo script, quindi premi Invio. Riporterà il nome di ciascun file di immagine JPEG che è stato preso su un iPhone.
- Suggerimento: per accedere più facilmente alla directory di lavoro di destinazione all'interno del Terminale, digita
cd
seguito da uno spazio, quindi trascina e trascina da Finder la cartella di destinazione nella finestra Terminale. Questo popola il nome percorso completo per te e quindi puoi semplicemente premere Invio. Ora sei nella directory di lavoro di destinazione contenente i file di immagine JPEG.
Codice:
#!/bin/bash
for f in *.jpg *.JPG; do
x="$(mdls "$f" | grep -o 'iPhone')"
if [[ ! -z "$x" ]]; then
echo "$f was taken on an iPhone."
fi
done
Ora ovviamente vorrai che faccia qualcosa di diverso, quindi riprendi il nome di un file di immagine JPEG che è stato preso su un iPhone, quindi dovrai aggiungere ulteriori comandi all'interno del ciclo for ... done
.
In questo esempio voglio che tutti i file di immagine JPEG presi su un iPhone vengano spostati nel nome di una directory "iPhone" all'interno della directory di lavoro . Quindi ho modificato lo script di conseguenza.
Codice modificato:
#!/bin/bash
if [[ ! -d "iPhone" ]]; then
mkdir "iPhone"
fi
for f in *.jpg *.JPG; do
x="$(mdls "$f" | grep -o 'iPhone')"
if [[ ! -z "$x" ]]; then
echo "$f was taken on an iPhone."
mv -v "$f" "./iPhone/"
fi
done
In sommario:
Nel primo if ... fi
block [[ ! -d "iPhone" ]]
verifica l'esistenza della directory "iPhone" all'interno della corrente directory di lavoro e se non esiste già, è creata da% co_de comando%.
Nel ciclo mkdir
guarda solo i file con estensioni for ... done
e .jpg
. ( Ho entrambi sul mio sistema. )
La variabile .JPG
sarà vuota senza contenere $x
o ""
al completamento dei comandi all'interno della sostituzione del comando "iPhone"
.
L'output del comando "$(...)"
per il file di immagine JPEG viene convogliato mdls
al comando |
cercando grep
e a causa dell'opzione iPhone
sarà o una stringa vuota o il parola "iPhone" che viene restituita, che diventa il contenuto della variabile -o
.
Pertanto nel secondo $x
block if ... fi
verifica per vedere che la variabile [[ ! -z "$x" ]]
non è una stringa vuota e quando contiene qualcosa, in questo caso essendo "iPhone", agirà su quel "$x"
o .jpg
file. Nel caso in cui .JPG
non sia una stringa vuota, poiché può contenere solo nulla o "iPhone", sposta tale file nella directory "iPhone" all'interno della directory di lavoro .
Note:
Dopo averlo testato in diverse posizioni su entrambi i supporti di memorizzazione interni ed esterni, ho notato che in alcuni punti i file sono stati archiviati e che mentre contenevano effettivamente il modello della fotocamera che li ha creati comunque non si rifletteva nell'output di il comando $x
poiché tali località sono state escluse dall'indicizzazione di Spotlight. Quindi, usando il comando fornito da terze parti, mdls
assicurato leggendo le informazioni direttamente dal file stesso e non affidandosi alle informazioni indicizzate (o alla mancanza di informazioni indicizzate) a cui accede il comando exiftool
.
Quindi, se vuoi scaricare e installare ExifTool e usarlo, allora modifica mdls
in mdls
nella riga exiftool
dello script in modo che assomigli a x="$(mdls "$f" | grep -o 'iPhone')"
.
In confronto sullo stesso file di immagine JPEG il comando x="$(exiftool "$f" | grep -o 'iPhone')"
mostrava i valori di 23 Tag aggiuntivi che non erano visualizzati dal comando exiftool
. Ciò potrebbe fornire ulteriori informazioni per decidere a livello di codice su come differenziare in modo assoluto la fonte dei file aggiungendo altro codice allo script che utilizzerebbe le informazioni nei Tag aggiuntivi, se necessario.