
Desafío: Necesito analizar el resultado del comando "identificar" de imagemagick para detectar la presencia de una cadena en particular. Si no existe, hago eco del nombre del archivo en la pantalla.
Fondo: Tengo aproximadamente 100.000 imágenes en miniatura (Miniatura de ejemplo que debe analizarse). Necesito inspeccionar cada miniatura para asegurarme de que se haya representado correctamente. Afortunadamente, "representado correctamente" se puede determinar por la presencia de píxeles rojos en la miniatura. Usando el comando "identificar" de imagemagick, puedo generar el mapa de colores que contendrá la línea "(255, 0, 0) #FF0000 rojo".
Necesidad: Usando un script bash, puedo obtener fácilmente todos los nombres de archivos e iterarlos. Necesito descubrir cómosilenciosamenteanalice la salida y busque una coincidencia de cadena y repita el nombre del archivo si no se encuentra.
Específicamente, lo que busco hacer es crear un script que haga lo siguiente:
1) busca todos los archivos *.png en un directorio particular.
2) para cada archivo, ejecute "identify -verbose" ysilenciosamentepasar la salida a...
3) analice la salida para ver si existe la cadena "(255, 0, 0) #FF0000 red".
3a) si es así, continúo en silencio con el siguiente archivo.
3b) si no es así, hago eco del nombre del archivo.
Al final, me quedaría con una breve lista de miniaturas que no contenían píxeles rojos y requerían inspección manual.
Cualquier ayuda para crear este script seríamayoríaapreciado.
Respuesta1
Para buscar archivos que no tengan píxeles rojos:
for i in *png; do identify -verbose "$i" | gawk -e "{print \"$i\", \$0}" | fgrep -q '(255, 0, 0) #FF0000 red' || echo $i; done
Para buscar archivos que tengan píxeles rojos:
for i in *png; do identify -verbose "$i" | gawk -e "{print \"$i\", \$0}" | fgrep -q '(255, 0, 0) #FF0000 red' && echo $i; done
El comando gawk agrega el nombre del archivo a cada línea de salida del comando de identificación. Usar fgrep en lugar de grep solo busca coincidencias de texto exactas (más rápido). El indicador -q de fgrep le indica que no genere ninguna línea; solo para establecer el estado en éxito o fracaso.
El script debe ser seguro para nombres de archivos que contengan espacios.