Find PNG-billeder større end x pixel gennem Linux Shell
Når du forsøger at arbejde på at ændre designen af dit websted, skal du være bekymret for bredden af billederne i dit artikelindhold. Jeg har notorisk store screenshots på de fleste artikler jeg har skrevet, så hvis jeg vil øge sidebjælken, er det afgørende at finde ud af, hvilke billeder der skal være for store til at passe ind i det nye design.
Da jeg er en programmør, ville det være let for mig at skrive en lille applikation til at gøre dette, men det fik mig til at tænke ... hvorfor kan jeg ikke gøre det på Linux kommandolinjen?
Det første jeg regnede med var, at PNG-billeder viser størrelsesdataene, når du kører kommandoen "fil" på dem:
$ file image3.png
image3.png: PNG-billeddata, 613 x 657, 8-bit / farve RGBA, ikke-interlaced
Meget nyttigt siden 99% af billedet på dette websted er i PNG-format. Så nu skal du smide det i en loop for alle filerne i min upload katalog:
$ for f i * .png; gør filen $ f; færdig
image.png: PNG-billeddata, 631 x 185, 8-bit / farve RGBA, ikke-interlaced
image1.png: PNG-billeddata, 631 x 96, 8-bit / farve RGBA, ikke-interlaced
image10.png: PNG-billeddata, 375 x 395, 8-bit / farve RGBA, ikke-interlaced
image11.png: PNG-billeddata, 484 x 241, 8-bit / farve RGBA, ikke-interlaced
-snipped-
Dette er mere nyttigt, men jeg skal trække dataene i Excel eller en lignende applikation for at sortere dataene, så jeg besluttede at bruge linux "cut" -kommandoen for at trække bare bredde kolonnen.
Du vil bemærke, at -f5 parameter fortæller skåret for at tage den femte kolonne, og -d \ med et mellemrum efter det fortæller skåret for at bruge et mellemrum som afgrænseren. Slash \ tegnet er et escape tegn, der fortæller skallen at bruge rummet som et tegn, og ikke som whitespace.
$ for f i * .png; gør filen $ f | cut -f5 -d \; done
631
631
375
484
-snipped-
Ikke helt nyttigt output, er det? Lad os skubbe det gennem en bash hvis erklæring, og så kun vise output fra filkommandoen, når bredden er større end 600 pixels.
Bemærk "(backtick) mærker omkring" filen $ f | cut ... "sektionen, som indikerer, at kommandoerne inde i 'vil blive behandlet som en enkelt output og fodret til if-sætningen, hvor vi bruger en -gt (større end). Bemærk også, at du har brug for mellemrum rundt om hver side af parenteserne []
for f i * .png; gør hvis ['fil $ f | cut-f5 -d''gt 600]; Fil derefter $ f; fi; done
image.png: PNG-billeddata, 631 x 185, 8-bit / farve RGBA, ikke-interlaced
image1.png: PNG-billeddata, 631 x 96, 8-bit / farve RGBA, ikke-interlaced
image17.png: PNG-billeddata, 638 x 340, 8-bit / farve RGBA, ikke-interlaced
image18.png: PNG-billeddata, 608 x 448, 8-bit / farve RGBA, ikke-interlaced
-snipped-
Nu har vi en liste over alle filerne større end 600 pixels bred. Du kunne justere "fil $ f" i slutningen for blot at ekko filnavnet, hvis du skulle kopiere eller flytte dem et andet sted:
for f i * .png; gør hvis ['fil $ f | cut-f5 -d''gt 600]; derefter echo $ f; fi; done
image.png
image1.png
image17.png
image18.png
-snipped-
Linux shell er utrolig kraftfuld! Denne løsning er ikke rigtig praktisk for alle, men det er godt at vide, hvordan man arbejder med skallen, så du kan udføre denne type opgave, når du skal.