29Jun

Encontrar imágenes PNG más grandes que x píxeles a través del shell de Linux

click fraud protection

Cuando intenta trabajar en 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, así que si quiero aumentar la barra lateral es fundamental averiguar qué imágenes van a ser demasiado anchas para caber en el nuevo diseño.

Como soy programador, me sería fácil escribir una pequeña aplicación para hacer esto, pero me hizo empezar 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 se ejecuta el comando "file" en ellos:

$ archivo image3.png
image3.png: datos de imagen PNG, 613 x 657, 8 bits / colorRGBA,

no entrelazado Muy útil ya que el 99% de la imagen en este sitio está en formato PNG.Así que ahora para ponerlo en un bucle para todos los archivos en mi directorio de carga:

$ para f en *. png; do file $ f; hecho

instagram viewer

image.png: datos de imagen PNG, 631 x 185, 8 bits / colorRGBA,
no entrelazado image1.png: datos de imagen PNG, 631 x 96, 8 bits / color RGBA,
no entrelazado image10.png: datos de imagen PNG, 375 x 395, 8 bits / color RGBA, no-entrelazado
image11.png: datos de imagen PNG, 484 x 241, 8 bits / color RGBA,
no entrelazado -snipped-

Esto es más útil, pero tendría que extraer los datos en Excel o una aplicación similar enPara ordenar los datos, decidí usar el comando linux "cut" para sacar solo la columna de ancho.

Notará que el parámetro -f5 le dice a cut que tome la quinta columna, y -d \ con un espacio después de que le dice a cut que use un espacio como delimitador. El carácter barra inclinada \ es un carácter de escape para indicar al shell que use el espacio como un personaje, y no como un espacio en blanco.

$ para f in *. png; do file $ f | cut -f5 -d \; hecho

631
631
375
484
-snipped-

Resultado no del todo útil, ¿verdad? Presionémoslo a través de una instrucción bash if, y luego solo mostremos la salida del comando file cuando el ancho sea mayor que 600 píxeles.

Observe las marcas `(retroceso) alrededor del" archivo $ f |cortar. .. "sección, que indica que los comandos dentro de` se procesarán como una única salida y se enviarán a la instrucción if, donde usaremos -gt( mayor que).También tenga en cuenta que necesita espacios a cada lado de los corchetes []

para f in *. png; do si [`file $ f |corte -f5 -d \ `-gt 600];luego archivo $ f; fi; hecho

image.png: datos de imagen PNG, 631 x 185, 8 bits / color RGBA,
no entrelazado image1.png: datos de imagen PNG, 631 x 96, 8 bits / color RGBA,
no entrelazado image17.png: datos de imagen PNG, 638 x 340, RGBA de 8 bits / color,
no entrelazado image18.png: datos de imagen PNG, 608 x 448, RGBA de 8 bits / color, no entrelazado
-snipped-

Ahora tenemos una lista de todos los archivos de más de 600 píxeles de ancho. Podrías ajustar el "archivo $ f" al final para simplemente hacer eco de los nombres de los archivos si necesitaras copiarlos o moverlos a otro lugar:

para f en *. png; do si [`file $ f |corte -f5 -d \ `-gt 600];luego echo $ f; fi; hecho

image.png
image1.png
image17.png
image18.png
-snipped-

¡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 caparazón para que pueda realizar este tipo de tareas cuando lo necesite.