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

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

    Când încercați să lucrați la modificarea designului site-ului dvs., trebuie să vă preocupați de lățimea imaginilor din conținutul articolului dvs. Am notorietate capturi de ecran mari pe cele mai multe dintre articolele pe care le-am scris, asa ca daca vreau sa cresc bara laterala este esential sa dau seama ce imagini vor fi prea largi pentru a se incadra in noul design.

    Din moment ce 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 acest lucru pe linia de comandă Linux?

    Primul lucru pe care mi-am dat seama este că imaginile PNG afișează datele de mărime atunci când rulați comanda "file" pe ele:

    $ file image3.png
    image3.png: date imagine PNG, 613 x 657, culoare RGBA pe 8 biți / culoare, fără intercalare

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

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

    image.png: date de imagine PNG, 631 x 185, RGBA de 8 biți / culoare, fără intercalare
    image1.png: date de imagine PNG, 631 x 96, culoare RGBA pe 8 biți / culoare, fără intercalare
    image10.png: date imagine PNG, 375 x 395, culoare RGBA pe 8 biți / culoare, fără intercalare
    image11.png: Date de imagine PNG, 484 x 241, 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 lățimii.

    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ă folosească un spațiu ca delimiter. Personajul slash este un caracter de evacuare pentru a spune shell-ului să folosească spațiul ca personaj, ș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 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 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 de imagine PNG, 631 x 185, RGBA de 8 biți / culoare, fără intercalare
    image1.png: date de imagine PNG, 631 x 96, culoare RGBA pe 8 biți / culoare, fără intercalare
    image17.png: Date imagine PNG, 638 x 340, RGBA pe 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 reda 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; 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 să.