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.