Ricerca di immagini PNG più grandi di pixel x tramite la shell di Linux
Quando stai cercando di modificare il design del tuo sito web, devi preoccuparti della larghezza delle immagini nel contenuto dell'articolo. Ho notoriamente grandi screenshot sulla maggior parte degli articoli che ho scritto, quindi se voglio aumentare la sidebar è fondamentale capire quali immagini saranno troppo ampie 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 mostrano i dati delle dimensioni quando si esegue il comando "file" su di loro:
$ file image3.png
image3.png: dati immagine PNG, 613 x 657, 8 bit / colore RGBA, non interlacciato
Molto utile poiché il 99% dell'immagine in questo sito è in formato PNG. Quindi ora 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 / colore RGBA, non interlacciati
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
-snipped-
Questo è più utile, ma dovrei inserire i dati in Excel o un'applicazione simile per ordinare i dati, così ho deciso di usare il comando "cut" di linux per estrarre solo la colonna della larghezza.
Noterai che il parametro -f5 dice a cut di prendere la quinta colonna e il -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 file $ f | cut -f5 -d \; fatto
631
631
375
484
-snipped-
Uscita non del tutto utile, vero? Spingiamolo attraverso un'istruzione bash, quindi mostriamo solo l'output del comando file quando la larghezza è maggiore di 600 pixel.
Notare i segni '(backtick) attorno al "file $ f | cut ... ", che indica che i comandi all'interno di" verranno 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; fatto
image.png: dati immagine PNG, 631 x 185, 8 bit / colore RGBA, non interlacciati
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 interlacciati
-snipped-
Ora abbiamo un elenco di tutti i file più grandi di 600 pixel di larghezza. Puoi aggiustare il "file $ f" alla fine per fare solo eco ai nomi dei file se dovessi copiarli o spostarli da qualche altra parte:
per f in * .png; do if ['file $ f | cut -f5 -d \ '-gt 600]; quindi 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 compito quando è necessario.