29Jun

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

click fraud protection

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

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 "filen" -kommandoen på dem:

$ file image3.png
image3.png: PNG-bildedata, 613 x 657, 8-bit / fargeRGBA, 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 opplastningskatalogen:

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

image.png: PNG-bilde data, 631 x 185, 8-bit / fargeRGBA, ikke-interlaced

instagram viewer

image1.png: PNG bilde data, 631 x 96, 8-bit / farge RGBA, ikke-sammenflettet
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
-cut-

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

Du vil merke at -f5 parameter forteller kuttet for å ta den femte kolonnen, og -d \ med et mellomrom etter at det forteller kuttet for å bruke et mellomrom som avgrenseren. Slash \ tegnet er et fluktegn for å fortelle skallet å bruke plassen som et tegn, og ikke som whitespace.

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

631
631
375
484
-kuttet-

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

Legg merke til `(backtick) merkene rundt" filen $ f |kutt. .. ", som indikerer at kommandoene inne 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 |kutt-f5 -d \ `-gt 600];deretter fil $ f; fi; done

image.png: PNG bilde data, 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-sammenflettet
image18.png: PNG bilde data, 608 x 448, 8-bit / farge RGBA, ikke-sammenflettet
-cut-

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 filnavnene hvis du skulle kopiere eller flytte dem et annet sted:

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

image.png
image1.png
image17.png
image18.png
-skjæret-

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 det.