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?
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 filename
wobei " 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 cd
Befehl, 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.
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 ... fi
Block [[ ! -d "iPhone" ]]
wird geprüft, ob das Verzeichnis „iPhone“ im aktuellen Arbeitsverzeichnis vorhanden ist , und falls es noch nicht existiert, wird es vom mkdir
Befehl erstellt.
In der for ... done
Schleife werden nur Dateien mit den Erweiterungen .jpg
und .JPG
. ( Ich habe beide auf meinem System. )
Die $x
Variable ist entweder leer und enthält nichts ""
oder "iPhone"
nach Abschluss der Befehle innerhalb der "$(...)"
Befehlsersetzung.
Die Ausgabe des mdls
Befehls für die JPEG-Bilddatei wird |
an den grep
Suchbefehl weitergeleitet iPhone
, und aufgrund der -o
Option wird entweder eine leere Zeichenfolge oder das Wort „iPhone“ zurückgegeben, das zum Inhalt der $x
Variablen wird.
Daher wird im zweiten if ... fi
Block [[ ! -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 .jpg
oder .JPG
Datei reagieren. Falls es $x
sich 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 mdls
wurde diese Standorte wurden von der Indizierung durch Spotlight ausgeschlossen. Die Verwendung des von einem Drittanbieter bereitgestellten exiftool
Befehls 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 mdls
Befehl zugreift.
Wenn Sie also ExifTool herunterladen und installieren und verwenden möchten , dann ändern Sie in der Zeile des Skripts mdls
zu , damit es so aussieht .exiftool
x="$(mdls "$f" | grep -o 'iPhone')"
x="$(exiftool "$f" | grep -o 'iPhone')"
Im Vergleich zu derselben JPEG-Bilddatei exiftool
zeigte der Befehl die Werte von 23 zusätzlichen Tags, die vom mdls
Befehl 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.
glatter
Benutzer3439894
grep
jedoch 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 ichexiftool
einen Querschnitt von Informationen aus mehreren Dateien abrufen, die jeder Quelle bekannt sind, um zu sehen, was gegen ein falsches Positiv abgegrenzt werden kann.Benutzer3439894
exiftool
over zu verwendenmdls
.