29Jun

"PNG" atvaizdų paieška didesniu nei x pikselių per "Linux" korpusą

Kai bandote dirbti keičiant jūsų svetainės dizainą, turėtumėte rūpintis paveikslėlių pločiu savo straipsnio turinyje. Dauguma straipsnių, kuriuos parašiau, turiu žinomų didelių ekranų kopijų, taigi, jei noriu padidinti šoninę juostą, labai svarbu išsiaiškinti, kokios nuotraukos bus per plačios, kad tilptų į naują dizainą.

Kadangi aš esu programuotojas, man būtų lengva parašyti nedidelę paraišką tai padaryti, bet tai man paskatino galvoti. .. kodėl negaliu tai padaryti "Linux" komandinėje eilutėje?

Pirmas dalykas, kurį supratau, buvo tai, kad PNG atvaizdai rodo dydžio duomenis, kai paleidžiate jiems komandą "failas":

$ file image3.png
image3.png: PNG atvaizdų duomenys, 613 x 657, 8-bit / colorRGBA, tarpiniai

Labai naudingi, nes 99% šios svetainės paveikslėlio yra PNG formatu. Taigi, dabar mesti jį į kilpą visiems failams mano atsisiuntimo kataloge:

$ už f in *. png; daryti failą $ f; atlikta

image.png: PNG vaizdo duomenys, 631 x 185, 8-bit / colorRGBA, neinterlizuoto


image1.png: PNG atvaizdo duomenys, 631 x 96, 8 bitų / spalvos RGBA, be perbrauktų
image10.png: PNG vaizdo duomenys, 375 x 395, 8 bitų / spalvos RGBA,tarpiniai
image11.png: PNG atvaizdo duomenys, 484 x 241, 8 bitų / spalvotas RGBA, nesubrendę
-štampuoto-

Tai yra naudingiau, tačiau turėčiau traukti duomenis į "Excel" arba panašią programąnorėdami rūšiuoti duomenis, todėl nusprendžiau naudoti linux "cut" komandą, kad ištrauktumėte tik pločio stulpelį.

Jūs pastebėsite, kad parametras -f5 nurodo pjūvį priimti penktąją skiltį ir -d \ su tarpu po to, kai ji nurodo, kad norite naudoti tarpą kaip skirtuką.Slash'as \ character yra pabėgimo simbolis, kuris nurodo apvalkale naudoti tarpą kaip simbolį, o ne kaip tarpą.

$ už f in *. png; atlikite failą $ f | cut -f5 -d \; atliktas

631
631
375
484
-snipped-

Ne visai naudinga išvestis, ar tai? Pabandykime tai, naudodamiesi "bash if" teiginiu, tada parodykite failo komandų išvestį, kai plotis yra didesnis nei 600 pikselių.

Atkreipkite dėmesį, kad "(backtick) ženklai aplink" failą $ f |supjaustyti. .. ", kuri rodo, kad komandos" viduje "bus apdorojami kaip viena išvestis ir bus įrašyti į if teiginį, kuriame mes naudosime -gt( daugiau nei).Taip pat atkreipkite dėmesį, kad jums reikia tarpų aplink bet kurią skliaustų pusę []

už f in *. png; daryti, jei [`file $ f |supjaustyti -f5-d \ `-gt 600];tada failas $ f; fi; atliktas

image.png: PNG atvaizdavimo duomenys, 631 x 185, 8 bitų / spalvų RGBA, neinterlizuoti
image1.png: PNG atvaizdo duomenys, 631 x 96, 8 bitų / spalvos RGBA, neinterlizuoti
image17.png: PNG atvaizdavimo duomenys, 638 x 340, 8 bitų / spalvų RGBA, neinterlizuoti
image18.png: PNG atvaizdo duomenys, 608 x 448, 8 bitų / spalvos RGBA, be pertvaros
-snapped-

Dabar turime visų failų, kurių ilgis didesnis nei 600 pikselių, sąrašas. Galite nustatyti "failą $ f" pabaigoje, kad tiesiog atkartotumėte failų vardus, jei jums reikėjo juos kopijuoti ar perkelti kitur:

for f in *. png; daryti, jei [`file $ f |supjaustyti -f5-d \ `-gt 600];tada echo $ f; fi; atlikta

image.png
image1.png
image17.png
image18.png
-snipped-

"Linux" korpusas yra neįtikėtinai galingas!Šis sprendimas nėra praktiškas visiems, tačiau gerai žinoti, kaip dirbti su korpusu, kad galėtumėte atlikti tokio tipo užduotis, kai jums reikia.