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

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

    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:

    $ fil image3.png
    image3.png: PNG bilddata, 613 x 657, 8-bitars / färg RGBA, icke-interlaced

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

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

    image.png: PNG bilddata, 631 x 185, 8-bitars / RGBA-färg, icke-interlaced
    image1.png: PNG bilddata, 631 x 96, 8-bitars / RGBA-färg, 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
    -klippt-

    Det här är mer användbart, men jag skulle behöva dra data till Excel eller en liknande applikation för att sortera data, så jag bestämde mig för att använda kommandot linux "cut" för att dra ut bara breddkolumnen.

    Du kommer att märka att -f5-parametern berättar 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 \ karaktären är en flyktighet för att berätta att skalet ska använda utrymmet som ett tecken, och inte som whitespace.

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

    631
    631
    375
    484
    -klippt-

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

    Lägg märke till "(backtick) -märkena 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 / RGBA-färg, icke-interlaced
    image1.png: PNG bilddata, 631 x 96, 8-bitars / RGBA-färg, icke-interlaced
    image17.png: PNG bilddata, 638 x 340, 8-bitars / RGBA-färg, icke-interlaced
    image18.png: PNG bilddata, 608 x 448, 8-bitars / färg RGBA, icke-interlaced
    -klippt-

    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 ta bort 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]; sedan echo $ f; fi; done

    image.png
    image1.png
    image17.png
    image18.png
    -klippt-

    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.