29Jun

Hitta PNG-bilder större än x pixlar via Linux-skalet

click fraud protection

När du försöker arbeta med att ändra utformningen av din webbplats måste du vara oroad över bildens bredd i ditt artikelinnehåll. Jag har notoriskt stora skärmdumpar på de flesta artiklar jag har skrivit, så om jag vill öka sidofältet är det viktigt att ta reda på vilka bilder som ska vara för breda för att passa in i den nya designen.

Eftersom jag är programmerare skulle det vara lätt för mig att skriva en liten applikation för att göra det, men det fick mig att börja tänka. .. varför kan jag inte göra det på Linux-kommandoraden?

Det första jag funnit var att PNG-bilder visar storleksdata när du kör kommandot "fil" på dem:

$ file image3.png
image3.png: PNG bilddata, 613 x 657, 8-bit / färgRGBA, icke-interlaced

Mycket användbar eftersom 99% av bilden på denna sida finns i PNG-format. Så nu kasta den i en slinga för alla filer i min uppladdningskatalog:

$ för f i *. png; gör fil $ f; gjort

image.png: PNG bilddata, 631 x 185, 8-bit / färgRGBA, icke-interlaced

instagram viewer

image1.png: PNG bilddata, 631 x 96, 8-bitars / färg RGBA, icke-interlaced
image10.png: PNG bilddata, 375 x 395, 8-bitars / färg RGBA, icke-interlaced
image11.png: PNG bilddata, 484 x 241, 8-bitars / RGBA-färg, icke-interlaced
-cut-

Detta är mer användbart, men jag måste dra data till Excel eller en liknande applikation iför att sortera data, så jag bestämde mig för att använda kommandot linux "cut" för att dra ut just breddkolumnen.

Du kommer att märka att -f5-parametern säger att du har klippt för att ta den femte kolumnen, och -d \ med ett mellanslag efter att det beräknas klippa för att använda ett mellanslag som avgränsare. Slash \ -tecknet är en flyktig person som berättar att skalet ska använda utrymmet som ett tecken och inte som blankutrymme.

$ för f i *. png; gör filen $ f | cut -f5 -d \; done

631
631
375
484
-cut-

Inte helt användbar utdata, är det? Låt oss trycka på det genom en bash, om det är ett uttalande, och visa sedan bara utmatningen av filkommandot när bredden är större än 600 pixlar.

Lägg märke till `(backtick) -märken runt" filen $ f |skära. .. ", vilket indikerar att kommandon inuti` kommer att behandlas som en enda utgång och matas in i if-satsen, där vi använder en -gt( större än).Observera också att du behöver mellanslag runt vardera sidan av parenteserna []

för f i *. png; gör om [`fil $ f |cut -f5 -d \ `-gt 600];sedan fil $ f; fi; done

image.png: PNG bilddata, 631 x 185, 8-bitars / färg RGBA, icke-interlaced
image1.png: PNG bilddata, 631 x 96, 8-bitars / färg RGBA, icke-interlaced
image17.png: PNG bilddata, 638 x 340, 8-bitars / färg RGBA, icke-interlaced
image18.png: PNG bilddata, 608 x 448, 8-bitars / färg RGBA, icke-interlaced
-cut-

Nu har vi en lista över alla filer som är större än 600 pixlar breda. Du kan justera "filen $ f" i slutet för att bara echo filnamnen om du behövde kopiera eller flytta dem någon annanstans:

för f i *. png; gör om [`fil $ f |cut -f5 -d \ `-gt 600];då echo $ f; fi; gjort

image.png
image1.png
image17.png
image18.png
-sniven-

Linux-skalet är otroligt kraftfullt! Denna lösning är inte riktigt praktisk för alla, men det är bra att veta hur man ska arbeta med skalet så att du kan uppnå denna typ av uppgift när du behöver.