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.