29Jun

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

click fraud protection

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ú aplikáciu, 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, bol, že obrázky PNG zobrazujú údaje o veľkosti pri spustení príkazu "file" na nich:

$ file image3.png
image3.png: Údaje o obrázku PNG 613 x 657, 8 bitov / farbaRGBA, netranslatované

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

$ pre f v *. png; do súboru $ f; urobiť

image.png: PNG obrazové dáta, 631 x 185, 8-bit / farbaRGBA, bez prekladania
image1.png: PNG obrazové dáta, 631 x 96, 8 bit / RGBA, bez prekladania

instagram viewer

image10.png: PNG obrazové dáta, 375 x 395, 8 bit /prekladané
image11.png: obrazové dáta PNG, 484 x 241, 8 bit / farba RGBA, neprenesené
-sip -

Toto je užitočnejšie, ale musel by som vytiahnuť dáta do programu Excel alebo podobnej aplikácieaby sa údaje zoradili, rozhodol som sa 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 potom, čo povedal, aby sa ako oddeľovač použil medzeru. Symbol lomítka je znakom úniku, ktorý povie shellu, že použije priestor ako znak a nie ako medzera.

$ pre f v *. png; do súboru $ f | cut -f5 -d \; done

631
631
375
484
-snipped-

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

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

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

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

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

pre f v *. png; do if [`file $ f |rez -f5 -d \ "-gt 600];potom echo $ f; fi; done

image.png
image1.png
image17.png
image18.png
-snipped-

Linux shell je neuveriteľne výkonný!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 úloh, keď to potrebujete.