Búsqueda de imágenes PNG más grandes que x píxeles a través del shell de Linux
Cuando intenta trabajar para cambiar el diseño de su sitio web, debe preocuparse por el ancho de las imágenes en el contenido de su artículo. Tengo capturas de pantalla notoriamente grandes en la mayoría de los artículos que he escrito, por lo que si quiero aumentar la barra lateral es fundamental averiguar qué imágenes van a ser demasiado amplias para caber en el nuevo diseño..
Como soy programador, sería fácil para mí escribir una pequeña aplicación para hacer esto, pero me hizo comenzar a pensar ... ¿por qué no puedo hacer esto en la línea de comandos de Linux??
Lo primero que descubrí fue que las imágenes PNG muestran los datos de tamaño cuando ejecutas el comando "archivo" en ellos:
$ archivo image3.png
image3.png: datos de imagen PNG, 613 x 657, RGBA de 8 bits / color, no entrelazados
Muy útil ya que el 99% de la imagen en este sitio está en formato PNG. Así que ahora para lanzarlo en un bucle para todos los archivos en mi directorio de carga:
$ para f en * .png; hacer archivo $ f; hecho
image.png: datos de imagen PNG, RGBA de 8 bits x color, 631 x 185, no entrelazados
image1.png: datos de imagen PNG, RGBA de 8 bits x color, 631 x 96, no entrelazados
image10.png: datos de imagen PNG, 375 x 395, RGBA de 8 bits / color, no entrelazados
image11.png: datos de imagen PNG, 484 x 241, RGBA de 8 bits / color, no entrelazados
-cortado-
Esto es más útil, pero tendría que llevar los datos a Excel o una aplicación similar para ordenar los datos, así que decidí usar el comando "cortar" de Linux para extraer solo la columna de ancho.
Notará que el parámetro -f5 le dice a cortar que tome la quinta columna, y el -d \ con un espacio después de que le diga a corte que use un espacio como delimitador. La barra diagonal \ carácter es un carácter de escape para decirle al shell que use el espacio como un carácter, y no como espacios en blanco.
$ para f en * .png; haga el archivo $ f | cut -f5 -d \; hecho
631
631
375
484
-cortado-
La salida no es del todo útil, ¿verdad? Empujemos eso a través de una sentencia bash if, y luego solo mostraremos la salida del comando de archivo cuando el ancho sea mayor que 600 píxeles.
Observe las marcas '(comillas invertidas) alrededor del "archivo $ f | Corte ... ”, que indica que los comandos dentro de 'se procesarán como una sola salida y se enviarán a la instrucción if, donde usamos un -gt (mayor que). También tenga en cuenta que necesita espacios alrededor de cada lado de los corchetes []
para f en * .png; haz si ['archivo $ f | corte -f5 -d \ '-gt 600]; luego archiva $ f; fi; hecho
image.png: datos de imagen PNG, RGBA de 8 bits x color, 631 x 185, no entrelazados
image1.png: datos de imagen PNG, RGBA de 8 bits x color, 631 x 96, no entrelazados
image17.png: datos de imagen PNG, 638 x 340, RGBA de 8 bits / color, no entrelazados
image18.png: datos de imagen PNG, 608 x 448, RGBA de 8 bits / color, sin entrelazar
-cortado-
Ahora tenemos una lista de todos los archivos de más de 600 píxeles de ancho. Puede ajustar el "archivo $ f" al final para repetir los nombres de archivo si necesita copiarlos o moverlos a otra parte:
para f en * .png; haz si ['archivo $ f | corte -f5 -d \ '-gt 600]; entonces echo $ f; fi; hecho
imagen.png
imagen1.png
image17.png
image18.png
-cortado-
El shell de Linux es increíblemente poderoso! Esta solución no es realmente práctica para todos, pero es bueno saber cómo trabajar con el shell para que pueda realizar este tipo de tarea cuando necesite.