Hjemmeside » hvordan » Finne PNG-bilder større enn x piksler gjennom Linux Shell

    Finne PNG-bilder større enn x piksler gjennom Linux Shell

    Når du prøver å jobbe med å endre utformingen av nettstedet ditt, må du være bekymret for bredden på bildene i artikkelinnholdet ditt. Jeg har notorisk store skjermbilder på de fleste artiklene jeg har skrevet, så hvis jeg vil øke sidebjørnet, er det avgjørende å finne ut hvilke bilder som skal være for store til å passe inn i den nye designen.

    Siden jeg er programmerer, ville det være lett for meg å skrive et lite program for å gjøre dette, men det fikk meg til å tenke ... hvorfor kan jeg ikke gjøre dette på Linux-kommandolinjen?

    Det første jeg fant ut var at PNG-bilder viser størrelsesdataene når du kjører "fil" -kommandoen på dem:

    $ fil image3.png
    image3.png: PNG bilde data, 613 x 657, 8-bit / farge RGBA, ikke-interlaced

    Veldig nyttig siden 99% av bildet på dette nettstedet er i PNG-format. Så nå å kaste den i en loop for alle filene i opplastingsmappen min:

    $ for f i * .png; gjør fil $ f; ferdig

    image.png: PNG-bildedata, 631 x 185, 8-bit / farge RGBA, ikke-interlaced
    image1.png: PNG bilde data, 631 x 96, 8-bit / farge RGBA, ikke-interlaced
    image10.png: PNG bilde data, 375 x 395, 8-bit / farge RGBA, ikke-interlaced
    image11.png: PNG-bilde data, 484 x 241, 8-bit / farge RGBA, ikke-interlaced
    -Bekkasin-

    Dette er mer nyttig, men jeg må trekke dataene i Excel eller en lignende applikasjon for å sortere dataene, så jeg bestemte meg for å bruke linux "cut" -kommandoen for å trekke ut bare bredde kolonnen.

    Du får merke til -f5-parameteren forteller kuttet for å ta den femte kolonnen, og -d \ med et mellomrom etter at det forteller kuttet for å bruke et mellomrom som avgrenseren. Slash \ -karakteret er et fluktegn for å fortelle skallet å bruke plassen som et tegn, og ikke som hvitt plass.

    $ for f i * .png; gjør fil $ f | cut -f5 -d \; ferdig

    631
    631
    375
    484
    -Bekkasin-

    Ikke helt nyttig utgang, er det? La oss skyve det gjennom en bash hvis setning, og så bare vise utgangen av filkommandoen når bredden er større enn 600 piksler.

    Legg merke til "(backtick) merkene rundt" filen $ f | kuttet ... "-delen, som indikerer at kommandoene i 'vil bli behandlet som en enkelt utgang og matet inn i if-setningen, der vi bruker en -gt (større enn). Legg også merke til at du trenger mellomrom rundt hver side av brakettene []

    for f i * .png; gjør hvis ['fil $ f | kutte-f5 -d''gt 600]; deretter fil $ f; fi; done

    image.png: PNG-bildedata, 631 x 185, 8-bit / farge RGBA, ikke-interlaced
    image1.png: PNG bilde data, 631 x 96, 8-bit / farge RGBA, ikke-interlaced
    image17.png: PNG bilde data, 638 x 340, 8-bit / farge RGBA, ikke-interlaced
    image18.png: PNG bilde data, 608 x 448, 8-bit / farge RGBA, ikke-interlaced
    -Bekkasin-

    Nå har vi en liste over alle filene som er større enn 600 piksler bredt. Du kan justere "filen $ f" på slutten for å bare ekko ut filnavnene hvis du skulle kopiere eller flytte dem et annet sted:

    for f i * .png; gjør hvis ['fil $ f | kutte-f5 -d''gt 600]; da ekko $ f; fi; ferdig

    image.png
    image1.png
    image17.png
    image18.png
    -Bekkasin-

    Linux-skallet er utrolig kraftig! Denne løsningen er ikke veldig praktisk for alle, men det er godt å vite hvordan du skal jobbe med skallet slik at du kan oppnå denne typen oppgave når du trenger å.