29Jun

Găsirea imaginilor PNG mai mari decât x pixeli prin shell-ul Linux

click fraud protection

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 majoritatea articolelor 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 mi-am dat seama a fost că imaginile PNG afișează datele despre dimensiune atunci când rulați comanda "file" pe ele:
$ file image3.png
image3.png: date imagine PNG, 613 x 657, 8 biți / culoareRGBA, fără intercalare

Foarte util, deoarece 99% din imaginea de pe acest site sunt în format PNG.Acum, pentru a arunca într-o buclă pentru toate fișierele din directorul meu de încărcare:

$ pentru f în *. png; nu fișier $ f; făcut

instagram viewer

image.png: date imagine PNG, 631 x 185, 8 biți / culoareRGBA, fără intercalare
image1.png: date imagine PNG, 631 x 96, 8 biți / culoare RGBA, non-intercalate
image10.png: date imagine PNG, 375 x 395,intercalate
image11.png: date de imagine PNG, 484 x 241, 8 biți / culoare RGBA, non-intercalate
-sipate-

Acest lucru este mai util, dar ar trebui să trag datele în Excel sau o aplicație similară înpentru a sorta datele, așa că am decis să folosesc comanda linux "cut" pentru a extrage doar coloana de lățime.

Veți observa că parametrul -f5 indică tăierea pentru a lua a cincea coloană, și -d \ cu un spațiu după ce îi spune tăiat să utilizeze un spațiu ca delimitator. 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; nu fișier $ f | cut -f5 -d \; făcut

631
631
375
484
-sip-

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` vor fi procesate 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 fiecărei laturi a parantezelor []

pentru f în *. png; do dacă [`fișier $ f |tăiat -f5 -d \ "-gt 600];apoi fișierul $ f; fi; făcut

imagine.png: date imagine PNG, 631 x 185, 8 biți / culoare RGBA, non-intercalate
image1.png: date imagine PNG, 631 x 96, 8 biți / culoare RGBA, non-intercalate
image17.png: Date imagine PNG, 638 x 340, 8 biți / culoare RGBA, non-intercalate
image18.png: Date imagine PNG, 608 x 448, RGBA pe 8 biți / culoare, fără intercalare
-sip -

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 redenumi doar numele de fișiere dacă aveați nevoie să le copiați sau să le mutați în altă parte:

pentru f în *. png; do dacă [`file $ f |tăiat -f5 -d \ "-gt 600];apoi echo $ f; fi; făcut

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.