Hjemmeside » hvordan » Find PNG-billeder større end x pixel gennem Linux Shell

    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.