29Jun

Ricerca di immagini PNG più grandi di pixel x tramite la shell di Linux

Quando cerchi di modificare il design del tuo sito web, devi preoccuparti della larghezza delle immagini nel contenuto dell'articolo. Ho degli screenshot notoriamente grandi sulla maggior parte degli articoli che ho scritto, quindi se voglio aumentare la sidebar è fondamentale capire quali foto saranno troppo larghe per adattarsi al nuovo design.

Dato che sono un programmatore, sarebbe facile per me scrivere una piccola applicazione per farlo, ma mi ha fatto iniziare a pensare. .. perché non posso farlo sulla riga di comando di Linux?

La prima cosa che ho capito è che le immagini PNG visualizzano i dati delle dimensioni quando si esegue il comando "file" su di essi:

$ file image3.png
image3.png: dati immagine PNG, 613 x 657, 8 bit / coloreRGBA, non interlacciato

Molto utile poiché il 99% dell'immagine in questo sito è in formato PNG.Quindi ora per lanciarlo in un ciclo per tutti i file nella mia directory di upload:

$ per f in *. png; fai file $ f; fatto

image.png: dati immagine PNG, 631 x 185, 8 bit / coloreRGBA, non interlacciato


image1.png: dati immagine PNG, 631 x 96, 8 bit / colore RGBA, non interlacciato
image10.png: dati immagine PNG, 375 x 395, 8 bit / colore RGBA, non-interlacciato
image11.png: dati immagine PNG, 484 x 241, 8-bit / colore RGBA, non interlacciato
-snapolto-

Questo è più utile, ma dovrei inserire i dati in Excel o un'applicazione simile inPer ordinare i dati, ho deciso di usare il comando linux "cut" per estrarre solo la colonna della larghezza.

Noterai che il parametro -f5 dice a cut di prendere la quinta colonna, e -d \ con uno spazio dopo che dice di tagliare per usare uno spazio come delimitatore. Il carattere barra è un carattere di escape per dire alla shell di usare lo spazio come carattere, e non come spazio bianco.

$ per f in *. png; fai il file $ f | cut -f5 -d \; done

631
631
375
484
-snipped-

Non è un output completamente utile, vero? Spingiamolo attraverso un'istruzione bash, quindi mostriamo solo l'output del comando file quando la larghezza è maggiore di 600 pixel.

Notate i segni `(backtick) attorno al" file $ f |cut. .. ", che indica che i comandi all'interno di` saranno elaborati come output singolo e inseriti nell'istruzione if, dove usiamo un -gt( maggiore di).Si noti inoltre che sono necessari spazi attorno ai lati delle parentesi []

per f in *. png; do if [`file $ f |cut -f5 -d \ `-gt 600];quindi file $ f; fi; done

image.png: dati immagine PNG, 631 x 185, 8 bit / colore RGBA, non interlacciato
image1.png: dati immagine PNG, 631 x 96, 8 bit / colore RGBA, non interlacciato
image17.png: dati immagine PNG, 638 x 340, 8-bit / colore RGBA, non interlacciato
image18.png: dati immagine PNG, 608 x 448, 8-bit / colore RGBA, non interlacciato
-snipped-

Ora abbiamo una lista di tutti i file più grandi di 600 pixel di larghezza.È possibile regolare il "file $ f" alla fine per fare solo eco ai nomi dei file se è necessario copiarli o spostarli da qualche altra parte:

per f in *. png; do if [`file $ f |cut -f5 -d \ `-gt 600];then echo $ f; fi; done

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

La shell di Linux è incredibilmente potente! Questa soluzione non è davvero pratica per tutti, ma è bene sapere come lavorare con la shell in modo da poter eseguire questo tipo di attività quando è necessario.