Wie finde ich heraus, welche Fotos von meinem iPhone gemacht und welche per WhatsApp gesendet wurden?

Nach einem schönen Urlaub habe ich oft um die 200 Fotos gemacht und davon 80 % selbst gemacht, 10 % eingehende WhatsApp-Bilder und 10 % andere Bilder, die auf meinem iPhone gelandet sind.

Ich möchte nicht einmal, dass die WhatsApp-Bilder automatisch von Carousel auf meinem iPhone 6 gesichert werden, aber leider gibt es keine Möglichkeit, dies zu deaktivieren.

Gibt es eine einfache Möglichkeit, von meinem MacBook aus die Bilder, die ich selbst gemacht habe, aus den anderen Bildern herauszufiltern?

Antworten (1)

Dies nutzt die in der JPEG-Bilddatei gespeicherten Exif- Informationen, von denen einige von Spotlight indiziert werden, siehe jedoch den Abschnitt Hinweise: unten.

Hier ist ein einfaches Beispiel-Bash-Skript, um eine Aktion für alle JPEG-Bilddateien auszuführen, die im Arbeitsverzeichnis gefunden wurden , das auf einem iPhone aufgenommen wurde.

Kopieren Sie den folgenden Code und fügen Sie ihn ohne Erweiterung in eine Plan-Textdatei ein, und machen Sie ihn von einem Terminal aus ausführbar, indem Sie verwenden, chmod +x filenamewobei " Dateiname " der Name ist, den Sie der Skriptdatei gegeben haben. Legen Sie es dann in einem Verzeichnis ab, das sich in Ihrem befindet $PATH, z. B. /usr/local/bin, andernfalls müssen Sie den vollständig qualifizierten Pfadnamen zur Skriptdatei auf der Befehlszeile angeben , um sie auszuführen.

Verwenden Sie nun in einem Terminal den cdBefehl, um in das Zielverzeichnis zu wechseln , das die JPEG-Bilddateien enthält, auf die Sie reagieren möchten. Dies wird zum Zielarbeitsverzeichnis , und geben Sie den Namen ein, den Sie dem Skript gegeben haben, und drücken Sie dann die Eingabetaste. Es gibt den Namen jeder JPEG-Bilddatei wieder, die auf einem iPhone aufgenommen wurde.

  • Tipp: Um vom Terminal aus einfacher zum Zielarbeitsverzeichnis zu navigieren ,cd geben Sie gefolgt von einem Leerzeichen ein und ziehen Sie dann den Zielordner aus dem Finder in das Terminalfenster. Dadurch wird der vollständig qualifizierte Pfadname für Sie ausgefüllt, und Sie können dann einfach die Eingabetaste drücken. Sie befinden sich jetzt im Ziel- Arbeitsverzeichnis , das die JPEG-Bilddateien enthält.

Code:

#!/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

Jetzt möchten Sie natürlich, dass es etwas anderes tut, als nur den Namen einer JPEG-Bilddatei wiederzugeben, die auf einem iPhone aufgenommen wurde, also müssen Sie zusätzliche Befehle innerhalb der Schleife hinzufügen for ... done.

In diesem Beispiel möchte ich, dass alle JPEG-Bilddateien, die auf einem iPhone aufgenommen wurden, in ein Verzeichnis namens „iPhone“ innerhalb des Arbeitsverzeichnisses verschoben werden . Also habe ich das Skript entsprechend angepasst.

Bearbeiteter Code:

#!/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 Summe:

Im ersten if ... fiBlock [[ ! -d "iPhone" ]]wird geprüft, ob das Verzeichnis „iPhone“ im aktuellen Arbeitsverzeichnis vorhanden ist , und falls es noch nicht existiert, wird es vom mkdirBefehl erstellt.

In der for ... doneSchleife werden nur Dateien mit den Erweiterungen .jpgund .JPG. ( Ich habe beide auf meinem System. )

Die $xVariable ist entweder leer und enthält nichts ""oder "iPhone"nach Abschluss der Befehle innerhalb der "$(...)"Befehlsersetzung.

Die Ausgabe des mdlsBefehls für die JPEG-Bilddatei wird |an den grepSuchbefehl weitergeleitet iPhone, und aufgrund der -oOption wird entweder eine leere Zeichenfolge oder das Wort „iPhone“ zurückgegeben, das zum Inhalt der $xVariablen wird.

Daher wird im zweiten if ... fiBlock [[ ! -z "$x" ]]getestet, ob die "$x"Variable keine leere Zeichenfolge ist, und wenn sie etwas enthält, in diesem Fall "iPhone", wird sie auf diese .jpgoder .JPGDatei reagieren. Falls es $xsich nicht um eine leere Zeichenfolge handelt, da sie nur nichts oder „iPhone“ enthalten kann, wird diese Datei in das Verzeichnis „iPhone“ innerhalb des Arbeitsverzeichnisses verschoben .

Anmerkungen:

Nachdem ich dies an mehreren Stellen auf internen und externen Speichermedien getestet hatte, bemerkte ich, dass an einigen Stellen die Dateien gespeichert waren und dass sie zwar tatsächlich das Modell der Kamera enthielten, die sie erstellt hatte, dies jedoch nicht in der Ausgabe des Befehls als widergespiegelt mdlswurde diese Standorte wurden von der Indizierung durch Spotlight ausgeschlossen. Die Verwendung des von einem Drittanbieter bereitgestellten exiftoolBefehls stellte also sicher, dass die Informationen direkt aus der Datei selbst gelesen wurden und sich nicht auf indizierte Informationen (oder das Fehlen von indizierten Informationen) verließen, auf die der mdlsBefehl zugreift.

Wenn Sie also ExifTool herunterladen und installieren und verwenden möchten , dann ändern Sie in der Zeile des Skripts mdlszu , damit es so aussieht .exiftoolx="$(mdls "$f" | grep -o 'iPhone')"x="$(exiftool "$f" | grep -o 'iPhone')"

Im Vergleich zu derselben JPEG-Bilddatei exiftoolzeigte der Befehl die Werte von 23 zusätzlichen Tags, die vom mdlsBefehl nicht angezeigt wurden. Dies kann zusätzliche Informationen liefern, um programmgesteuert die Entscheidung zu treffen, wie die Quelle der Dateien absolut unterschieden werden kann, indem zusätzlicher Code zum Skript hinzugefügt wird, der Informationen in den zusätzlichen Tags verwenden würde, falls erforderlich.

Würde das nicht auch per WhatsApp verschickte Bilder einpacken, da diese Bilder (theoretisch) ihre EXIF-Daten behalten sollten? Wenn ich zum Beispiel einen Freund hätte, der mir ein Foto geschickt hat und er das Bild auf einem iPhone aufgenommen hätte, wären diese EXIF-Daten dann nicht mehr vorhanden oder würden sie nicht auch in Ihr Skript übernommen?
@smoooosher, Theoretisch ja, JPEG-Dateien von WhatsApp könnten "iPhone" enthalten, das grepjedoch gesucht wird, wenn man sich die im OP verlinkten Bilder ansieht, zeigt das von WhatsApp diese Informationen nicht. Das bedeutet natürlich nicht, dass es nicht existiert, aber der Zweck des Skripts ist es, eine Möglichkeit zu zeigen, auf der Grundlage einer Variablen auf bestimmte Dateien zu reagieren, und es kann codiert werden, um andere Informationen zu überprüfen, die in diesem Fall ein falsches Positiv stoppen könnten . Hier würde ich exiftooleinen Querschnitt von Informationen aus mehreren Dateien abrufen, die jeder Quelle bekannt sind, um zu sehen, was gegen ein falsches Positiv abgegrenzt werden kann.
@smoooosher, Beispielsweise sendet WhatsApp meines Wissens nach keine exakte Kopie der ursprünglichen Bilddatei, sondern komprimiert sie und entfernt möglicherweise sogar einige der ursprünglichen Exif-Informationen. Ich habe WhatsApp nicht zum Spielen/Testen installiert. Das Skript könnte also weiter codiert werden, um auch nach einer Dateigröße zu suchen, oder vielleicht werden Dateien, die von WhatsApp gesendet werden, mit der Zeichenfolge z. B. „WhatsApp“ gekennzeichnet und nicht von Spotlight indiziert. Ein weiterer guter Grund, exiftoolover zu verwenden mdls.