3 votos

¿Cómo saber qué fotos fueron hechas por mi iPhone y cuáles fueron enviadas por WhatsApp?

Después de unas buenas vacaciones suelo hacer unas 200 fotos y el 80% las hago yo, el 10% son fotos de WhatsApp entrantes y el 10% son otras fotos que acaban en mi iPhone.

Ni siquiera quiero que Carousel haga una copia de seguridad automática de las fotos de WhatsApp en mi iPhone 6, pero desgraciadamente no hay forma de desactivarlo.

¿Existe una manera fácil de filtrar desde mi MacBook las fotos que he hecho yo mismo de las otras fotos?

4voto

user3439894 Puntos 5883

Esto hace uso de la Exif información almacenada en el archivo de imagen JPEG, algunos de los cuales son indexados por Spotlight, sin embargo, ver el Notas: sección de abajo.

Aquí hay un simple ejemplo de bash script para preformar una acción en cualquier archivo de imagen JPEG encontrado en el directorio de trabajo que fue tomada en un iPhone.

Copie y pegue el código siguiente en un archivo de texto plano, sin extensión, y desde un Terminal, hágalo ejecutable usando chmod +x filename donde " nombre de archivo " es el nombre que le diste al archivo script. Luego colócalo en un directorio que esté en tu $PATH Por ejemplo /usr/local/bin de lo contrario, tendrá que proporcionar la ruta de acceso completa al archivo script en el línea de comandos para ejecutarlo.

Ahora, en un Terminal, utilice el botón cd para cambiar al objetivo directorio que contiene los archivos de imagen JPEG sobre los que desea actuar, éste se convierte en el objetivo directorio de trabajo y escriba el nombre que le dio al script, luego presione Enter. Se hará eco del nombre de cada archivo de imagen JPEG que se tomó en un iPhone.

  • Sugerencia: Para navegar más fácilmente hacia el objetivo directorio de trabajo desde el Terminal, escriba cd seguido de un espacio y, a continuación, arrastre y suelte desde el Finder la carpeta de destino en la ventana del Terminal. Esto rellena el nombre de ruta completamente calificado para usted y luego sólo tiene que pulsar Enter. Ahora estás en el objetivo directorio de trabajo que contiene los archivos de imagen JPEG.

Código:

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

Ahora, obviamente, querrás que haga algo más que simplemente hacer eco del nombre de un archivo de imagen JPEG que fue tomado en un iPhone, por lo que tendrás que añadir comando(s) adicional(es) dentro del for ... done bucle.

En este ejemplo quiero que todos los archivos de imagen JPEG que se tomaron en un iPhone se muevan a un directorio llamado "iPhone" dentro del directorio de trabajo . Así que he modificado el script en consecuencia.

Código editado:

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

En resumen:

En la primera if ... fi bloque [[ ! -d "iPhone" ]] comprueba la existencia del directorio "iPhone" dentro de la carpeta actual directorio de trabajo y si no existe ya, es creado por el mkdir comando.

En el for ... done bucle sólo mira los archivos con extensiones .jpg y .JPG . ( Tengo ambos en mi sistema. )

El $x será una variable vacía que no contiene nada "" o "iPhone" una vez completados los comandos dentro del "$(...)" sustitución de comandos.

La salida del mdls para el archivo de imagen JPEG se canaliza | a la grep comando que busca iPhone y por la -o se devolverá una cadena vacía o la palabra "iPhone", que se convertirá en el contenido del archivo $x variable.

Por lo tanto, en la segunda if ... fi bloque [[ ! -z "$x" ]] pruebas para ver que el "$x" no es una cadena vacía y cuando contenga algo, en este caso siendo "iPhone", va a actuar sobre esa .jpg o .JPG archivo. En el caso de $x al no ser una cadena vacía, ya que sólo puede contener nada o "iPhone", mueve ese archivo al directorio "iPhone" dentro del directorio de trabajo .

Notas:

Habiendo probado esto en varias ubicaciones, tanto en el medio de almacenamiento interno como en el externo, me di cuenta de que en algunos lugares se almacenaban los archivos y que, aunque realmente contenían el modelo de la cámara que los creó, no se reflejaba en la salida del mdls ya que esas ubicaciones fueron excluidas de la indexación por Spotlight. Así que usando el, suministrado por terceros, exiftool aseguró la lectura de la información directamente del propio archivo y no se basó en la información indexada (o la falta de información indexada) que el mdls accesos del comando.

Así que si quieres descargar e instalar ExifTool y utilizarlo, luego cambiar mdls a exiftool en el x="$(mdls "$f" | grep -o 'iPhone')" línea del script para que se vea como x="$(exiftool "$f" | grep -o 'iPhone')" .

En comparación, en el mismo archivo de imagen JPEG, el exiftool mostró los valores de 23 Tags adicionales que no fueron mostrados por el mdls de la orden. Esto puede proporcionar información adicional para tomar programáticamente la decisión de cómo diferenciar absolutamente el origen de los archivos, añadiendo código adicional al script que utilizaría la información de las etiquetas adicionales, si fuera necesario.

AppleAyuda.com

AppleAyuda es una comunidad de usuarios de los productos de Apple en la que puedes resolver tus problemas y dudas.
Puedes consultar las preguntas de otros usuarios, hacer tus propias preguntas o resolver las de los demás.

Powered by:

X