Esto hace uso de la información de Exif almacenada en el archivo de imagen JPEG, algunas de las cuales están indexadas por Spotlight, sin embargo consulte la sección Notas: a continuación.
Aquí hay un sencillo ejemplo de script bash para realizar una acción en cualquier archivo de imagen JPEG que se encuentre en el directorio de trabajo que se realizó en un iPhone.
Copie y pegue el siguiente código en un archivo de texto del plan, sin extensión, y desde una Terminal, hágalo ejecutable usando chmod +x filename
donde " filename " es el nombre que le dio al script expediente. Luego colóquelo en un directorio que esté en su $PATH
, por ejemplo, /usr/local/bin
, de lo contrario tendrá que proporcionar la ruta de acceso completa al archivo de script en la línea de comando para ejecutarlo.
Ahora, en una Terminal, use el comando cd
para cambiar al directorio de destino que contiene los archivos de imagen JPEG sobre los que desea actuar, esto se convierte en el directorio de trabajo y escriba el nombre que le dio a la secuencia de comandos y presione Entrar. Se hará eco del nombre de cada archivo de imagen JPEG que se tomó en un iPhone.
- Sugerencia: para navegar más fácilmente al directorio de trabajo de destino desde dentro de la Terminal, escriba
cd
seguido de un espacio y luego arrastre y suelte la carpeta de destino desde el Finder hasta la ventana de la Terminal. Esto rellena el nombre de ruta completo por usted y luego puede presionar Intro. Ahora se encuentra en el 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á hacer otra cosa que no sea más que repetir el nombre de un archivo de imagen JPEG que se tomó en un iPhone, por lo que tendrá que agregar comandos adicionales dentro del bucle for ... done
.
En este ejemplo, quiero que todos los archivos de imágenes JPEG que se tomaron en un iPhone se muevan a un nombre de directorio "iPhone" dentro del directorio de trabajo . Así que modifiqué 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 el primer if ... fi
el bloque [[ ! -d "iPhone" ]]
prueba la existencia del directorio "iPhone" dentro del directorio de trabajo actual y, si no existe, es creado por el mkdir
comando.
En el bucle for ... done
solo mira los archivos con las extensiones .jpg
y .JPG
. ( Tengo ambos en mi sistema. )
La variable $x
estará vacía y no contendrá nada ""
o "iPhone"
al completar los comandos dentro de la sustitución del comando "$(...)"
.
La salida del comando mdls
para el archivo de imagen JPEG se canaliza |
al comando grep
buscando iPhone
y debido a la opción -o
será una cadena vacía o la palabra "iPhone" que se devuelve, que se convierte en el contenido de la variable $x
.
Por lo tanto, en la segunda prueba if ... fi
el bloque [[ ! -z "$x" ]]
comprueba que la variable "$x"
no es una cadena vacía y cuando contiene algo, en este caso como "iPhone", actuará sobre esa% co_de Archivo% o .jpg
. En el caso de que .JPG
no sea una cadena vacía, ya que solo puede contener nada o "iPhone", mueve ese archivo al directorio "iPhone" dentro del directorio de trabajo .
Notas :
Después de haber probado esto en varios lugares, tanto en medios de almacenamiento internos como externos, noté que en algunos lugares los archivos se almacenaban y que si bien contenían el modelo de la cámara que los creó, no obstante, no se reflejó en la salida de el comando $x
ya que esas ubicaciones fueron excluidas de la indexación por Spotlight. Entonces, usando el comando mdls
asegurado por terceros, lea la información directamente desde el propio archivo y no confíe en la información indexada (o en la falta de información indexada) a la que accede el comando exiftool
.
Entonces, si desea descargar e instalar ExifTool y usarlo, entonces cambie mdls
a mdls
en la línea exiftool
de la secuencia de comandos para que se vea como x="$(mdls "$f" | grep -o 'iPhone')"
.
En comparación con el mismo archivo de imagen JPEG, el comando x="$(exiftool "$f" | grep -o 'iPhone')"
mostró los valores de 23 Etiquetas adicionales que no se mostraron con el comando exiftool
. Esto puede proporcionar información adicional para tomar la decisión de cómo diferenciar de manera absoluta la fuente de los archivos agregando código adicional al script que usaría la información en las Etiquetas adicionales, si es necesario.