Când încercați să lucrați la modificarea designului site-ului dvs. web, trebuie să vă preocupați de lățimea imaginilor din conținutul articolului. Am notorietate capturi de ecran mari pe cele mai multe dintre articolele pe care le-am scris, deci dacă vreau să măresc bara laterală, este esențial să aflăm care imagini vor fi prea largi pentru a se încadra în noul design.
Deoarece sunt programator, mi-ar fi ușor să scriu o mică cerere pentru a face acest lucru, dar ma făcut să încep să mă gândesc ... de ce nu pot face asta pe linia de comandă Linux?
Primul lucru pe care l-am dat seama a fost că imaginile PNG afișează datele de dimensiune atunci când rulați comanda "file" pe ele:
$ file image3.png
image3.png: date imagine PNG, 613 x 657, RGBA pe 8 biți / culoare, fără intercalare
Foarte util, deoarece 99% din imaginea de pe acest site este în format PNG. Deci, acum să o aruncați într-o buclă pentru toate fișierele din directorul meu de încărcare:
$ pentru f în * .png; face fișier $ f; terminat
image.png: date imagine PNG, 631 x 185, RGBA de 8 biți / culoare, fără intercalare
image1.png: date imagine PNG, 631 x 96, culoare RGBA pe 8 biți / culoare, fără intercalare
image10.png: date imagine PNG, 375 x 395, RGBA pe 8 biți / culoare, fără intercalare
image11.png: date imagine PNG, 484 x 241, culoare RGBA pe 8 biți / culoare, fără intercalare
-snipped-
Acest lucru este mai util, dar ar trebui să trag datele în Excel sau într-o aplicație similară pentru a sorta datele, deci am decis să folosesc comanda linux "cut" pentru a extrage doar coloana de lățime.
Veți observa că parametrul -f5 spune tăiat pentru a lua a cincea coloană, și -d \ cu un spațiu după ce spune tăiat să utilizeze un spațiu ca delimiter. Caracterele \ slash este un caracter de evacuare pentru a spune shell-ului să folosească spațiul ca un caracter, și nu ca spații libere.
$ pentru f în * .png; face fișierul $ f | cut -f5 -d \; terminat
631
631
375
484
-snipped-
Nu este o ieșire total utilă, nu-i așa? Să o împingem printr-o instrucțiune bash if și apoi să afișăm numai ieșirea comenzii de fișier când lățimea este mai mare de 600 de pixeli.
Observați semnul "(backtick) în jurul" fișierului $ f | cut ... ", care indică faptul că comenzile din interiorul lui" vor fi prelucrate ca o singură ieșire și introduse în instrucțiunea if, unde vom folosi o valoare -gt (mai mare decât). De asemenea, rețineți că aveți nevoie de spații în jurul oricărei părți a parantezelor []
pentru f în * .png; face dacă ['fișier $ f | tăiat -f5 -d \ '-gt 600]; apoi fișierul $ f; fi; done
image.png: date imagine PNG, 631 x 185, RGBA de 8 biți / culoare, fără intercalare
image1.png: date imagine PNG, 631 x 96, culoare RGBA pe 8 biți / culoare, fără intercalare
image17.png: Date de imagine PNG, 638 x 340, RGBA de 8 biți / culoare, fără intercalare
image18.png: date imagine PNG, 608 x 448, culoare RGBA pe 8 biți / culoare, fără intercalare
-snipped-
Acum avem o listă a tuturor fișierelor cu o lățime mai mare de 600 de pixeli. Aveți posibilitatea să ajustați fișierul "$ f" la sfârșit pentru a echivala numele de fișiere dacă aveați nevoie să le copiați sau să le mutați în altă parte:
pentru f în * .png; face dacă ['fișier $ f | tăiat -f5 -d \ '-gt 600]; apoi echo $ f; fi; terminat
image.png
image1.png
image17.png
image18.png
-snipped-
Cochilia Linux este incredibil de puternică! Această soluție nu este practică pentru toată lumea, dar este bine să știți cum să lucrați cu coajă, astfel încât să puteți realiza acest tip de sarcină atunci când aveți nevoie.