Pronalaženje PNG slika Veće od x piksela kroz Linux ljusku
Kada pokušavate raditi na promjeni dizajna vaše web-lokacije, morate se brinuti o širini slika u svom članku. Dobio sam notorne velike snimke zaslona na većini članaka koje sam napisao, tako da ako želim povećati bočnu traku, važno je shvatiti koje će slike biti preširoke da bi se uklopile u novi dizajn.
Budući da sam programer, bilo bi mi lako napisati malu aplikaciju da to učinim, ali to me natjeralo da počnem razmišljati ... 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 "datoteka" na njima:
$ file image3.png
image3.png: PNG slikovni podaci, 613 x 657, 8-bitni / u boji RGBA, bez prepletanja
Vrlo korisno jer je 99% slike na ovoj stranici u PNG formatu. Sada ga bacite u petlju za sve datoteke u mom direktoriju za prijenos:
$ za f u * .png; učinite datoteku $ f;
image.png: PNG slikovni podaci, 631 x 185, 8-bitni / u boji RGBA, bez preplitanja
image1.png: PNG slikovni podaci, 631 x 96, 8-bitni / u boji RGBA, bez prepletanja
image10.png: PNG slikovni podaci, 375 x 395, 8-bitni / u boji RGBA, bez prepletanja
image11.png: PNG slikovni podaci, 484 x 241, 8-bitni / u boji RGBA, bez prepletanja
-snipped-
To je korisnije, ali morao bih povući podatke u Excel ili sličnu aplikaciju kako bih razvrstao podatke, pa sam odlučio koristiti linux "cut" naredbu za izvlačenje samo stupca širine.
Primijetit ćete da -f5 parametar govori rez da se peti stupac, a -d razmak nakon što kaže rez koristiti prostor kao graničnik. Znak za kosu crtu je znak za bijeg koji govori ljusci da prostor koristi kao znak, a ne kao razmak.
$ za f u * .png; napraviti datoteku $ f | cut -f5 -d \ t
631
631
375
484
-snipped-
Nije posve koristan izlaz, zar ne? Pustimo to kroz bash if izjavu, i onda samo pokazati izlaz naredbe datoteke kada je širina veća od 600 piksela.
Obratite pozornost na oznake ((backtick) oko datoteke $ f | cut… ”, koji ukazuju da će naredbe unutar 'biti obrađene kao jedan izlaz i ubačene u if izraz, gdje koristimo -gt (veći od). Također imajte na umu da su vam potrebni prostori oko obje strane zagrada []
za f u * .png; učiniti ako ['file $ f | cut -f5 -d -gt 600]; zatim datoteku $ f; fi; učinjeno
image.png: PNG slikovni podaci, 631 x 185, 8-bitni / u boji RGBA, bez preplitanja
image1.png: PNG slikovni podaci, 631 x 96, 8-bitni / u boji RGBA, bez prepletanja
image17.png: PNG slikovni podaci, 638 x 340, 8-bitni / u boji RGBA, bez prepletanja
image18.png: PNG slikovni podaci, 608 x 448, 8-bitni / u boji RGBA, bez prepletanja
-snipped-
Sada imamo popis svih datoteka koje su veće od 600 piksela. Možete podesiti "file $ f" na kraju kako biste samo odjekli imena datoteka ako ih trebate kopirati ili premjestiti negdje drugdje:
za f u * .png; učiniti ako ['file $ f | cut -f5 -d -gt 600]; zatim echo $ f; fi; učinjeno
image.png
image1.png
image17.png
image18.png
-snipped-
Linux ljuska je nevjerojatno moćna! Ovo rješenje nije praktično za svakoga, ali dobro je znati kako raditi s ljuskom tako da možete izvršiti ovu vrstu zadatka kada trebate.