29Jun

Pronalaženje PNG slika veće od x piksela kroz Linux Shell

Kada pokušavate raditi na promjeni dizajna vaše web stranice, morate se brinuti o širini slika u sadržaju članka. Imam notorno velike screenshotove na većini članaka koje sam napisao, pa ako želim povećati bočnu traku, ključno je shvatiti koje će slike biti preširoke da bi se uklopile u novi dizajn.

Budući da sam programer, bilo bi lako napisati malu prijavu za to, ali to me natjeralo da razmišljam. .. zašto to ne mogu učiniti na Linux komandnoj liniji?

Prva stvar koju sam shvatio je da PNG slike prikazuju podatke o veličini kada pokrenete naredbu "datoteku" na njima:

$ file image3.png
image3.png: PNG podatci o slici, 613 x 657, 8-bitni / bojaRGBA, ne isprepleteni

Vrlo korisno jer je 99% slike na ovoj stranici u PNG formatu. Dakle sada ga bacite u petlju za sve datoteke u mojem prijenosnom direktoriju:

$ za f u *. png; učinite datoteku $ f; učinjeno

image.png: PNG podaci o slici, 631 x 185, 8-bit / colorRGBA, ne interlaced
image1.png: PNG slikovni podaci, 631 x 96, 8-bitni / color RGBA, ne isprepleteni


image10.png: PNG podatci o slici, 375 x 395, 8-bitni /interlaced
image11.png: PNG slikovni podaci, 484 x 241, 8-bitni / color RGBA, ne isprepleteni
-snošeni

To je korisnije, ali bih trebao povući podatke u Excel ili sličnu aplikaciju ukako bi razvrstali podatke, pa sam odlučio koristiti linux "cut" naredbu za izvlačenje samo stupca širine.

Primijetit ćete da parametar -f5 kaže da je rez za peti stupac, a -d \ s razmakom nakon što je ispričao rez da bi upotrijebio prostor kao graničnik. Zastava \ znak je znak za bijeg da bi se ljuska upotrijebila za prostor kao znak, a ne kao prazan prostor.

$ za f u *. png; učinite datoteku $ f | cut -f5 -d \; učinjeno

631
631
375
484
-snipped-

Nije sasvim korisno izlaz, zar ne? Gurnimo to preko bash ako je izjava, a zatim samo prikazati izlaz naredbe datoteka kada širina je veća od 600 piksela.

Obavijestiti `(backtick) oznake oko" file $ f |cut. .. ", koji upućuju na to da će se naredbe unutar` će obrađivati ​​kao jedan izlaz i unijeti u if izjavu, gdje koristimo -gt( veći od).Također imajte na umu da trebate razmake s obje strane zagrada []

za f u *. png; učinite ako [`file $ f |cut-f5-d-gt 600];zatim datoteku $ f; fi; učinjeno

image.png: PNG podaci o slici, 631 x 185, 8-bitni / boja RGBA, ne isprepleteni
image1.png: PNG slikovni podaci, 631 x 96, 8-bitni / color RGBA, ne interlaced
image17.png: PNG podaci o slici, 638 x 340, 8-bitni / u boji RGBA, ne isprepleteni
image18.png: PNG podaci o slici, 608 x 448, 8-bitni / boja RGBA, ne isprepleteni
-snošaj-

Sada imamo popis svih datoteka širih od 600 piksela. Na kraju možete podesiti "datoteku $ f" kako bi se samo odzvali nazivi datoteka ako ih trebate kopirati ili premjestiti negdje drugdje:

za f in *. png; učinite ako [`file $ f |cut-f5-d-gt 600];a zatim echo $ f; fi; učinjeno

image.png
image1.png
image17.png
image18.png
-snošaj-

Linux ljuska je nevjerojatno moćna! Ovo rješenje nije stvarno praktično za sve, ali dobro je znati kako raditi s ljuskom tako da možete ostvariti ovu vrstu zadataka kada trebate.