Come scoprire quali foto sono state fatte dal mio iPhone e quali sono state inviate tramite WhatsApp?

3

Dopo una bella vacanza ho scattato spesso circa 200 foto e l'80% è stato realizzato da me stesso, il 10% ha ricevuto le immagini di WhatsApp e il 10% sono state altre immagini che sono finite sul mio iPhone.

Non voglio nemmeno che le immagini di WhatsApp vengano automaticamente salvate da Carousel sul mio iPhone 6, ma sfortunatamente non c'è modo di disattivarlo.

C'è un modo semplice dal mio MacBook per filtrare le immagini che ho creato dalle altre foto?

  • Immaginepositiva: link
  • Immagine di WhatsApp: link
posta ujjain 29.07.2015 - 17:45
fonte

1 risposta

4

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.

    
risposta data 29.07.2015 - 22:29
fonte

Leggi altre domande sui tag