Úvodná » ako » Hľadanie obrázkov PNG väčších ako pixelov v systéme Linux Shell

    Hľadanie obrázkov PNG väčších ako pixelov v systéme Linux Shell

    Keď sa pokúšate pracovať na zmene dizajnu svojich webových stránok, musíte sa zaoberať šírkou obrázkov v obsahu článku. Mám notoricky veľké screenshoty na väčšinu článkov som napísal, takže ak chcem zvýšiť bočný panel, je rozhodujúce zistiť, ktoré obrázky budú príliš široké, aby sa zmestili do nového dizajnu.

    Keďže som programátor, bolo by pre mňa ľahké napísať malú žiadosť, aby som to urobil, ale začalo som to premýšľať ... Prečo to nemôžem urobiť na príkazovom riadku Linuxu?

    Prvá vec, ktorú som zistil, bolo, že obrázky PNG zobrazujú údaje o veľkosti pri spustení príkazu "súbor" na nich:

    $ file image3.png
    image3.png: Obrazové dáta PNG, 613 x 657, 8 bit / farba RGBA, bez prekladania

    Veľmi užitočné, pretože 99% obrázkov na tejto stránke je vo formáte PNG. Takže teraz ho hodím do slučky pre všetky súbory v adresári pre nahrávanie:

    $ za f v * .png; súbor $ f; hotovo

    image.png: Obrazové dáta PNG, 631 x 185, 8-bitová / farebná RGBA, bez prekladania
    image1.png: Obrazové dáta PNG, 631 x 96, 8-bitová / farebná RGBA, bez prekladania
    image10.png: Obrazové dáta PNG, 375 x 395, 8-bitová / farebná RGBA, neprekladané
    image11.png: Obrazové dáta PNG, 484 x 241, 8-bitová / farebná RGBA, neprekladané
    -prestrihol-

    Toto je užitočnejšie, ale musel by som vytiahnuť dáta do programu Excel alebo podobnej aplikácie, aby som triedil dáta, a tak som sa rozhodol použiť príkaz linux "cut" na vytiahnutie len stĺpca šírky.

    Všimnete si, že parametr -f5 hovorí, že sa vybral piaty stĺpec a -d \ s medzerou po tom, čo povedal, aby sa ako oddeľovač použil medzerník. Symbol lomítka je únikový znak, ktorý povie shellu, aby použil priestor ako znak a nie ako medzery.

    $ pre f v * .png; súbor $ f | cut -f5 -d \; hotovo

    631
    631
    375
    484
    -prestrihol-

    Nie je to úplne užitočný výstup, však? Presuňme to prostredníctvom príkazu bash if a potom ukážeme iba výstup príkazu súboru, ak je šírka väčšia ako 600 pixelov.

    Všimnite si znaky "(backtick) okolo súboru $ f | cut ... ", ktoré naznačujú, že príkazy vo vnútri 'budú spracované ako jeden výstup a vložené do príkazu if, kde použijeme hodnotu -gt (väčšiu ako). Upozorňujeme tiež, že potrebujete medzery okolo oboch strán zátvoriek []

    pre f v * .png; urobiť ak ['súbor $ f | rez -f5 -d \ '-gt 600]; potom súbor $ f; fi; hotovo

    image.png: Obrazové dáta PNG, 631 x 185, 8-bitová / farebná RGBA, bez prekladania
    image1.png: Obrazové dáta PNG, 631 x 96, 8-bitová / farebná RGBA, bez prekladania
    image17.png: Obrazové dáta PNG, 638 x 340, 8-bitová / farebná RGBA, bez prekladania
    image18.png: Obrazové dáta PNG, 608 x 448, 8-bitová / farebná RGBA, neprekladané
    -prestrihol-

    Teraz máme zoznam všetkých súborov väčších ako 600 pixelov. Môžete nastaviť "súbor $ f" na konci, aby ste len odzneli názvy súborov, ak potrebujete skopírovať alebo presunúť niekde inde:

    pre f v * .png; urobiť ak ['súbor $ f | rez -f5 -d \ '-gt 600]; potom echo $ f; fi; done

    image.png
    image1.png
    image17.png
    image18.png
    -prestrihol-

    Linux shell je neuveriteľne silný! Toto riešenie nie je naozaj praktické pre všetkých, ale je dobré vedieť, ako pracovať so škrupinou, aby ste mohli splniť tento typ úlohy, keď potrebujete.