29Jun

PNG-kuvien löytäminen suuremmaksi kuin x pikselit Linux Shellin kautta

Kun yrität työskennellä sivustosi suunnittelun muuttamisessa, sinun on otettava huomioon artikkelisi sisällön leveys. Minulla on huomattavia suuria kuvakaappauksia useimmista kirjoittamistani artikkeleista, joten jos haluan lisätä sivupalkkia, on kriittinen selvittää, mitkä kuvat ovat liian laajoja, jotta ne sopisivat uuteen muotoiluun.

Koska olen ohjelmoija, olisi helppoa kirjoittaa pieni sovellus tähän, mutta se sai minut ajattelemaan - miksi en voi tehdä tätä Linux-komentorivillä?

Ensimmäinen asia, jonka huomasin, oli, että PNG-kuvat näyttävät koon tiedot, kun suoritat niiden "tiedosto" -komennon:

$ file image3.png
image3.png: PNG-kuvatiedot, 613 x 657, 8-bittinen / väriRGBA, ei-lomitettu

Erittäin hyödyllinen, koska 99% tämän sivun kuvasta on PNG-muodossa. Joten nyt heittää se silmukkaan kaikille tiedostani latausluettelostani:

$ for f in *. png; tee tiedosto $ f; done

image.png: PNG-kuvatiedot, 631 x 185, 8-bittinen / väriRGBA, ei-lomitettu
image1.png: PNG-kuvadata, 631 x 96, 8-bittinen / väri RGBA, ei-lomitettu


image10.png: PNG-kuvadata, 375 x 395, 8-bittinen / väri RGBA,interlaced
image11.png: PNG-kuvatiedosto, 484 x 241, 8-bittinen / väri RGBA, ei-lomitettu
-snootettu

Tämä on hyödyllisempää, mutta minun pitäisi vetää tiedot Exceliin tai vastaaviin sovelluksiinjotta lajitella tiedot, joten päätin käyttää linux "leikata" komento vetää vain leveys sarake.

Huomaa, että -f5-parametri kertoo leikkauksen viidenteen sarakkeeseen ja -d \ välilyönnin jälkeen, kun se kertoo leikkauksen käyttämään tilaa rajaajana. Slash \ -merkki on välilyönti, joka kertoo shellille, että tilaa käytetään merkkinä eikä välilyönnä.

$ f: lle *. png; tee tiedosto $ f | leikkaa -f5 -d \; tehty

631
631
375
484
-snipped-

Ei täysin käyttökelpoista tulostusta, eikö?Työnnä se läpi bash-lausekkeen kautta ja näyttäkää vain tiedoston komennon tulos, kun leveys on suurempi kuin 600 pikseliä.

Huomaa `(backtick) -merkit 'tiedoston $ f' ympärilläleikkaus. .. "-osiosta, joka ilmaisee, että` käsittelevät komennot käsitellään yhtenä tuotoksena ja syötetään if-lauseen, jossa käytämme -gt( suurempi kuin).Huomaa myös, että tarvitset välilyöntejä molemmille puolille suluissa []

f: lle *. png; tee, jos [`file $ f |leikata -f5-d \ `-gt 600];sitten tiedosto $ f; fi; tehty

image.png: PNG-kuvadata, 631 x 185, 8-bittinen / värillinen RGBA, ei-lomitettu
image1.png: PNG-kuvadata, 631 x 96, 8-bittinen / väri RGBA, ei-lomitettu
image17.png: PNG-kuvadata, 638 x 340, 8-bittinen / värillinen RGBA, ei-lomitettu
image18.png: PNG-kuvadata, 608 x 448, 8-bittinen / värillinen RGBA, ei-lomitettu
-kiekko-

Nyt meillä on luettelo kaikista tiedostoista, jotka ovat suurempia kuin 600 pikseliä leveä.Voit lopettaa "tiedoston $ f" lopettamaan tiedostonimet vain, jos tarvitset kopiointia tai siirtämistä muualle:

f: lle *. png; tee, jos [`file $ f |leikata -f5-d \ `-gt 600];sitten echo $ f; fi; tehty

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

Linux-kuori on uskomattoman tehokas! Tämä ratkaisu ei ole kaikille käytännöllinen, mutta on hyvä tietää, miten työskennellä kuoren kanssa, jotta voit suorittaa tällaisen tehtävän, kun tarvitset.