29Jun
Když se snažíte pracovat na změně designu vašeho webu, musíte se zabývat šířkou obrázků v obsahu článku. Mám notoricky velké snímky na většině článků, které jsem napsal, takže pokud chci zvýšit postranní panel, je rozhodující zjistit, které obrázky budou příliš široké, aby se vešly do nového designu.
Jelikož jsem programátor, bylo by pro mě snadné napsat nějakou malou aplikaci, ale začala jsem přemýšlet. .. proč to nemohu udělat na příkazovém řádku Linuxu?
První věc, kterou jsem zjistil, bylo, že obrázky PNG zobrazují data velikosti, když na nich spustíte příkaz "soubor":
$ file image3.png
image3.png: Obrázková data PNG, 613 x 657, 8 bitů / barvaRGBA, netransparentní
Velmi užitečné, protože 99% obrázku na tomto webu je ve formátu PNG.Takže teď házet to ve smyčce pro všechny soubory v mém adresáři upload:
$ pro f v *. png; do souboru $ f; hotovo
image.png: PNG obrazová data, 631 x 185, 8-bit / colorRGBA, nepřekládaná
image1.png: obrazová data PNG, 631 x 96, 8bitová / barevná RGBA, nepřekládaná
image10.png: obrazová data PNG, 375 x 395, 8bitová / barevná RGBA,prokládané
image11.png: obrazová data PNG, 484 x 241, 8bitová / barevná RGBA, nepřekládaná
-detažená-
To je užitečnější, ale musím vytáhnout data do aplikace Excel nebo podobné aplikaceaby se data uspořádala, takže jsem se rozhodl použít příkaz linux "cut" pro vytažení pouze sloupce šířky.
Všimněte si, že parametr -f5 řekne řez, aby převzal pátý sloupec, a -d \ s mezerou poté, co řekne řez použít mezera jako mezera. Lomítkem \ character je znak escape, který řekne shellu, že použije místo jako znak a ne jako mezera.
$ pro f v *. png; do souboru $ f | cut -f5 -d \; hotovo
631
631
375
484
-snipped-
Není zcela užitečný výstup, že? Vytiskneme to pomocí příkazu bash if a zobrazíme pouze výstup příkazu souboru, když je šířka větší než 600 pixelů.
Všimněte si značky "(backtick) kolem" souboru $ f |cut. .. ", což naznačuje, že příkazy uvnitř` budou zpracovávány jako jediný výstup a budou vloženy do příkazu if, kde použijeme hodnotu -gt( větší než).Nezapomeňte, že potřebujete mezery na obou stranách závorky []
pro f v *. png; dělat pokud [`soubor $ f |řez -f5 -d \ "-gt 600];soubor
image.png: obrazová data PNG, 631 x 185, 8bitová / barevná RGBA, nepřekládaná
image1.png: obrazová data PNG, 631 x 96, 8bitová / barevná RGBA, nepřekládané
image17.png: obrazová data PNG, 638 x 340, 8bitová / barevná RGBA, nepřekládaná
image18.png: obrazová data PNG, 608 x 448, 8bitová / barevná RGBA, nepřekládaná
-sipped-
Nyní máme seznam všech souborů o šířce větší než 600 pixelů.Můžete nastavit "soubor $ f" na konci jen tak, že označíte názvy souborů, pokud potřebujete kopírovat nebo přesunout někde jinde:
pro f v *. png; dělat pokud [`soubor $ f |řez -f5 -d \ "-gt 600];pak echo $ f; fi; done
image.png
image1.png
image17.png
image18.png
-snipped-
Linux shell je neuvěřitelně silný!Toto řešení není pro všechny skutečně praktické, ale je dobré vědět, jak pracovat se skořápkou, abyste mohli tento typ úkolů splnit, když to potřebujete.