Fórum Root.cz

Hlavní témata => Software => Téma založeno: Honza1 24. 08. 2015, 12:25:45

Název: Nalezení a konvert obrázků
Přispěvatel: Honza1 24. 08. 2015, 12:25:45
ahoj

Chtěl bzch se zeptat, jak najít ve složce a podsložkách všechny obrázky jednoho typu, např. gif a zkovertovat je do PNG a smazat původní. Ostatní typy (JPG) nechat, a rozbalit všechny archívy s danou příponou. Zkoušel jsem na to napsat skript, ale vždy se to zacyklilo. MOžná by to nějak šlo pomocí find.
Název: Re:Nalezení a a konvert obrázků
Přispěvatel: Zopper 24. 08. 2015, 12:41:54
Rozděl si to na 2 nezávislé úkoly:
1) najít a upravit obrázky
2) rozbalit archiv

Find pro nalezení všech souborů s příponou .gif se určitě použít dá:
Kód: [Vybrat]
find .  -name "*.gif".Pak záleží, co konkrétně s těmi soubory děláš. Pokud je to něco jednoduchého, tak by šlo použít xargs:
Kód: [Vybrat]
find [argumenty] | xargs příkaz [argumenty]xargs zajistí předání standardního vstupu (to, co dostane přes rouru) jako argument svého příkazu. (find something | xargs rm tedy zavolá "rm něco" pro každý řádek co vyplivne find.)

Pokud děláš něco složitějšího, tak bude jednodušší si výstup find uložit do proměnné a procházet v cyklu. Jen pozor, pokud se ti ve jménech souborů/adresářů mohou vyskytnout mezery, tak to budeš muset náležitě ošetřit (možný hint: IFS).

Název: Re:Nalezení a a konvert obrázků
Přispěvatel: Honza1 24. 08. 2015, 13:58:53
Rozdělení úkolů určitě, jen jsem to shrnul do jednoho dotazu.

Nějak takto ?
for i in `find .  -name "*.gif"`; do j=`echo ${i} | sed 's/.gif//g'` ; convert -quality 100 ${i} ${j}.png ; rm ${i}  ; done
Funguje a jména sedí. Archivy budou podobně.

Co se táče mezer (diakritiky a podobného bordelu), tak už jsem se poučil. Jména souborů a složek jedině z alfanumerických znaků (62) a podtržítka.
Název: Re:Nalezení a a konvert obrázků
Přispěvatel: Honza1 24. 08. 2015, 14:08:34
Sada příkazů pro cnvert se zaqchováním hlobky 8 a 24 bit (jpg a pod. schválně nezahrnuto - tam už je komprese dost).

for i in `find .  -name "*.gif"`; do j=`echo ${i} | sed 's/.gif//g'` ; convert -quality 100 ${i} ${j}.png ; rm ${i}  ; done
for i in `find .  -name "*.GIF"`; do j=`echo ${i} | sed 's/.GIF//g'` ; convert -quality 100 ${i} ${j}.png ; rm ${i}  ; done
for i in `find .  -name "*.Gif"`; do j=`echo ${i} | sed 's/.Gif//g'` ; convert -quality 100 ${i} ${j}.png ; rm ${i}  ; done
for i in `find .  -name "*.png"`; do j=`echo ${i} | sed 's/.png//g'` ; convert ${i} ${j}.bmp ; rm ${i}  ; done
for i in `find .  -name "*.PNG"`; do j=`echo ${i} | sed 's/.PNG//g'` ; convert ${i} ${j}.bmp ; rm ${i}  ; done
for i in `find .  -name "*.Png"`; do j=`echo ${i} | sed 's/.Png//g'` ; convert ${i} ${j}.bmp ; rm ${i}  ; done
for i in `find .  -name "*.bmp"`; do j=`echo ${i} | sed 's/.bmp//g'` ; convert -quality 100 ${i} ${j}.png ; rm ${i}  ; done
for i in `find .  -name "*.BMP"`; do j=`echo ${i} | sed 's/.Bmp//g'` ; convert -quality 100 ${i} ${j}.png ; rm ${i}  ; done
for i in `find .  -name "*.Bmp"`; do j=`echo ${i} | sed 's/.Bmp//g'` ; convert -quality 100 ${i} ${j}.png ; rm ${i}  ; done
for i in `find .  -name "*.tif"`; do j=`echo ${i} | sed 's/.tif//g'` ; convert -quality 100 ${i} ${j}.png ; rm ${i}  ; done
for i in `find .  -name "*.TIF"`; do j=`echo ${i} | sed 's/.TIF//g'` ; convert -quality 100 ${i} ${j}.png ; rm ${i}  ; done
for i in `find .  -name "*.Tif"`; do j=`echo ${i} | sed 's/.Tif//g'` ; convert -quality 100 ${i} ${j}.png ; rm ${i}  ; done
for i in `find .  -name "*.tiff"`; do j=`echo ${i} | sed 's/.tiff//g'` ; convert -quality 100 ${i} ${j}.png ; rm ${i}  ; done
for i in `find .  -name "*.TIFF"`; do j=`echo ${i} | sed 's/.TIFF//g'` ; convert -quality 100 ${i} ${j}.png ; rm ${i}  ; done
for i in `find .  -name "*.Tiff"`; do j=`echo ${i} | sed 's/.Tiff//g'` ; convert -quality 100 ${i} ${j}.png ; rm ${i}  ; done
for i in `find .  -name "*.pcx"`; do j=`echo ${i} | sed 's/.pcx//g'` ; convert -quality 100 ${i} ${j}.png ; rm ${i}  ; done
for i in `find .  -name "*.PCX"`; do j=`echo ${i} | sed 's/.PCX//g'` ; convert -quality 100 ${i} ${j}.png ; rm ${i}  ; done
for i in `find .  -name "*.Pcx"`; do j=`echo ${i} | sed 's/.Pcx//g'` ; convert -quality 100 ${i} ${j}.png ; rm ${i}  ; done
for i in `find .  -name "*.ico"`; do j=`echo ${i} | sed 's/.ico//g'` ; convert -quality 100 ${i} ${j}.png ; rm ${i}  ; done
for i in `find .  -name "*.ICO"`; do j=`echo ${i} | sed 's/.ICO//g'` ; convert -quality 100 ${i} ${j}.png ; rm ${i}  ; done
for i in `find .  -name "*.Ico"`; do j=`echo ${i} | sed 's/.Ico//g'` ; convert -quality 100 ${i} ${j}.png ; rm ${i}  ; done
for i in `find .  -name "*.raw"`; do j=`echo ${i} | sed 's/.raw//g'` ; convert -quality 100 ${i} ${j}.png ; rm ${i}  ; done
for i in `find .  -name "*.RAW"`; do j=`echo ${i} | sed 's/.RAW//g'` ; convert -quality 100 ${i} ${j}.png ; rm ${i}  ; done
for i in `find .  -name "*.Raw"`; do j=`echo ${i} | sed 's/.Raw//g'` ; convert -quality 100 ${i} ${j}.png ; rm ${i}  ; done
Název: Re:Nalezení a a konvert obrázků
Přispěvatel: Honza1 24. 08. 2015, 14:30:09
A pro 8-bit hloubku u všech obrázků

for i in `find .  -name "*.png"`; do j=`echo ${i} | sed 's/.png//g'` ; convert -quality 100 ${i} ${j}.png ; rm ${i}  ; done
for i in `find .  -name "*.PNG"`; do j=`echo ${i} | sed 's/.PNG//g'` ; convert -quality 100 ${i} ${j}.png ; rm ${i}  ; done
for i in `find .  -name "*.Png"`; do j=`echo ${i} | sed 's/.Png//g'` ; convert -quality 100 ${i} ${j}.png ; rm ${i}  ; done
for i in `find .  -name "*.bmp"`; do j=`echo ${i} | sed 's/.bmp//g'` ; convert -quality 100 ${i} ${j}.gif ; rm ${i}  ; done
for i in `find .  -name "*.BMP"`; do j=`echo ${i} | sed 's/.Bmp//g'` ; convert -quality 100 ${i} ${j}.gif ; rm ${i}  ; done
for i in `find .  -name "*.Bmp"`; do j=`echo ${i} | sed 's/.Bmp//g'` ; convert -quality 100 ${i} ${j}.gif ; rm ${i}  ; done
for i in `find .  -name "*.tif"`; do j=`echo ${i} | sed 's/.tif//g'` ; convert -quality 100 ${i} ${j}.gif ; rm ${i}  ; done
for i in `find .  -name "*.TIF"`; do j=`echo ${i} | sed 's/.TIF//g'` ; convert -quality 100 ${i} ${j}.gif ; rm ${i}  ; done
for i in `find .  -name "*.Tif"`; do j=`echo ${i} | sed 's/.Tif//g'` ; convert -quality 100 ${i} ${j}.gif ; rm ${i}  ; done
for i in `find .  -name "*.tiff"`; do j=`echo ${i} | sed 's/.tiff//g'` ; convert -quality 100 ${i} ${j}.gif ; rm ${i}  ; done
for i in `find .  -name "*.TIFF"`; do j=`echo ${i} | sed 's/.TIFF//g'` ; convert -quality 100 ${i} ${j}.gif ; rm ${i}  ; done
for i in `find .  -name "*.Tiff"`; do j=`echo ${i} | sed 's/.Tiff//g'` ; convert -quality 100 ${i} ${j}.gif ; rm ${i}  ; done
for i in `find .  -name "*.pcx"`; do j=`echo ${i} | sed 's/.pcx//g'` ; convert -quality 100 ${i} ${j}.gif ; rm ${i}  ; done
for i in `find .  -name "*.PCX"`; do j=`echo ${i} | sed 's/.PCX//g'` ; convert -quality 100 ${i} ${j}.gif ; rm ${i}  ; done
for i in `find .  -name "*.Pcx"`; do j=`echo ${i} | sed 's/.Pcx//g'` ; convert -quality 100 ${i} ${j}.gif ; rm ${i}  ; done
for i in `find .  -name "*.ico"`; do j=`echo ${i} | sed 's/.ico//g'` ; convert -quality 100 ${i} ${j}.gif ; rm ${i}  ; done
for i in `find .  -name "*.ICO"`; do j=`echo ${i} | sed 's/.ICO//g'` ; convert -quality 100 ${i} ${j}.gif ; rm ${i}  ; done
for i in `find .  -name "*.Ico"`; do j=`echo ${i} | sed 's/.Ico//g'` ; convert -quality 100 ${i} ${j}.gif ; rm ${i}  ; done
for i in `find .  -name "*.raw"`; do j=`echo ${i} | sed 's/.raw//g'` ; convert -quality 100 ${i} ${j}.gif ;rm ${i}  ; done
for i in `find .  -name "*.RAW"`; do j=`echo ${i} | sed 's/.RAW//g'` ; convert -quality 100 ${i} ${j}.gif ; rm ${i}  ; done
for i in `find .  -name "*.Raw"`; do j=`echo ${i} | sed 's/.Raw//g'` ; convert -quality 100 ${i} ${j}.gif ; rm ${i}  ; done
for i in `find .  -name "*.gif"`; do j=`echo ${i} | sed 's/.gif//g'` ; convert -quality 100 ${i} ${j}.png ; rm ${i}  ; done
for i in `find .  -name "*.GIF"`; do j=`echo ${i} | sed 's/.GIF//g'` ; convert -quality 100 ${i} ${j}.png ; rm ${i}  ; done
for i in `find .  -name "*.Gif"`; do j=`echo ${i} | sed 's/.Gif//g'` ; convert -quality 100 ${i} ${j}.png ; rm ${i}  ; done

Název: Re:Nalezení a a konvert obrázků
Přispěvatel: neruda 24. 08. 2015, 14:59:06
A pro 8-bit hloubku u všech obrázků

for i in `find .  -name "*.png"`; do j=`echo ${i} | sed 's/.png//g'` ; convert -quality 100 ${i} ${j}.png ; rm ${i}  ; done
for i in `find .  -name "*.PNG"`; do j=`echo ${i} | sed 's/.PNG//g'` ; convert -quality 100 ${i} ${j}.png ; rm ${i}  ; done
for i in `find .  -name "*.Png"`; do j=`echo ${i} | sed 's/.Png//g'` ; convert -quality 100 ${i} ${j}.png ; rm ${i}  ; done
for i in `find .  -name "*.bmp"`; do j=`echo ${i} | sed 's/.bmp//g'` ; convert -quality 100 ${i} ${j}.gif ; rm ${i}  ; done
for i in `find .  -name "*.BMP"`; do j=`echo ${i} | sed 's/.Bmp//g'` ; convert -quality 100 ${i} ${j}.gif ; rm ${i}  ; done
for i in `find .  -name "*.Bmp"`; do j=`echo ${i} | sed 's/.Bmp//g'` ; convert -quality 100 ${i} ${j}.gif ; rm ${i}  ; done
for i in `find .  -name "*.tif"`; do j=`echo ${i} | sed 's/.tif//g'` ; convert -quality 100 ${i} ${j}.gif ; rm ${i}  ; done
for i in `find .  -name "*.TIF"`; do j=`echo ${i} | sed 's/.TIF//g'` ; convert -quality 100 ${i} ${j}.gif ; rm ${i}  ; done
for i in `find .  -name "*.Tif"`; do j=`echo ${i} | sed 's/.Tif//g'` ; convert -quality 100 ${i} ${j}.gif ; rm ${i}  ; done
for i in `find .  -name "*.tiff"`; do j=`echo ${i} | sed 's/.tiff//g'` ; convert -quality 100 ${i} ${j}.gif ; rm ${i}  ; done
for i in `find .  -name "*.TIFF"`; do j=`echo ${i} | sed 's/.TIFF//g'` ; convert -quality 100 ${i} ${j}.gif ; rm ${i}  ; done
for i in `find .  -name "*.Tiff"`; do j=`echo ${i} | sed 's/.Tiff//g'` ; convert -quality 100 ${i} ${j}.gif ; rm ${i}  ; done
for i in `find .  -name "*.pcx"`; do j=`echo ${i} | sed 's/.pcx//g'` ; convert -quality 100 ${i} ${j}.gif ; rm ${i}  ; done
for i in `find .  -name "*.PCX"`; do j=`echo ${i} | sed 's/.PCX//g'` ; convert -quality 100 ${i} ${j}.gif ; rm ${i}  ; done
for i in `find .  -name "*.Pcx"`; do j=`echo ${i} | sed 's/.Pcx//g'` ; convert -quality 100 ${i} ${j}.gif ; rm ${i}  ; done
for i in `find .  -name "*.ico"`; do j=`echo ${i} | sed 's/.ico//g'` ; convert -quality 100 ${i} ${j}.gif ; rm ${i}  ; done
for i in `find .  -name "*.ICO"`; do j=`echo ${i} | sed 's/.ICO//g'` ; convert -quality 100 ${i} ${j}.gif ; rm ${i}  ; done
for i in `find .  -name "*.Ico"`; do j=`echo ${i} | sed 's/.Ico//g'` ; convert -quality 100 ${i} ${j}.gif ; rm ${i}  ; done
for i in `find .  -name "*.raw"`; do j=`echo ${i} | sed 's/.raw//g'` ; convert -quality 100 ${i} ${j}.gif ;rm ${i}  ; done
for i in `find .  -name "*.RAW"`; do j=`echo ${i} | sed 's/.RAW//g'` ; convert -quality 100 ${i} ${j}.gif ; rm ${i}  ; done
for i in `find .  -name "*.Raw"`; do j=`echo ${i} | sed 's/.Raw//g'` ; convert -quality 100 ${i} ${j}.gif ; rm ${i}  ; done
for i in `find .  -name "*.gif"`; do j=`echo ${i} | sed 's/.gif//g'` ; convert -quality 100 ${i} ${j}.png ; rm ${i}  ; done
for i in `find .  -name "*.GIF"`; do j=`echo ${i} | sed 's/.GIF//g'` ; convert -quality 100 ${i} ${j}.png ; rm ${i}  ; done
for i in `find .  -name "*.Gif"`; do j=`echo ${i} | sed 's/.Gif//g'` ; convert -quality 100 ${i} ${j}.png ; rm ${i}  ; done

a co varianty bMP bMp iCO iCo atd?
tohle je hroznej bastl, pouzij outer loop a case insensitive search ...
Název: Re:Nalezení a a konvert obrázků
Přispěvatel: Honza1 24. 08. 2015, 15:46:21
V podstate spoleham na to ze tam nejsou (a nemeli by s nejvetsi pravdepodobnosti) stejne tak jako existuje mnoho dalsich formatu a typu, vypsal jsem ty nejpravdepodobnejsi. Jak to udelat insensitive case, to zatim nevim. Jak mas na mysi outer loop ?
Název: Re:Nalezení a a konvert obrázků
Přispěvatel: heho 24. 08. 2015, 16:26:27
Používat for x in `somecommand` by se celkově nemělo, výjimkou jsou wildcardy (for x in *.txt) kde to nerozděluje podle mezer ale podle souborů a řetězce co si píšu sám, takže vím jak vypadaj. Nepoužívání mezer pomůže ale rozhodně to není správné řešení. Mimo jiné je místo `.....` lepší používat $(.....), což (už) je také v POSIXu a umožňuje to vnořování a je celkově přehlednější. Co se skriptu týče, udělal bych to nějak takhle:
Kód: [Vybrat]
#!/bin/bash
# pokud mám argument, je to jméno soubru na zkonvertování
if [ $# -ge 1 ];then
    # ${1%.*} usekne z prvního argumentu poslední tečku a cokoli za ní
    # koncovku neznám kvůli case insensitive hledání
    if convert "$1" "${1%.*}.png";then
        rm "$1"
        exit 0
    else
        exit 1
    fi
fi

exts="gif ico tiff bmp"
dest=.
threads=4

for x in $exts;do
    # -iname - case insensitive verze -name abych nemusel hledat všechny varianty
    # nejsem si jistej jestli to je stadartní, nebo fičura GNU findu
    find "$dest" -iname "*.$x" -print0 | xargs -0 -I{} -n1 -P$threads "$0" "{}"
    # tu se zavolám se jménem souboru jako argumentem
done
Název: Re:Nalezení a konvert obrázků
Přispěvatel: nobody 24. 08. 2015, 21:01:17
jednim vrzem prohledavani vice pripon, pri nalezeni obrazek ihned prevadi a smaze ho jen pri uspesnem prevedeni:
Kód: [Vybrat]
find -regextype posix-extended -iregex '.*\.(bmp|gif|ico|pcx|raw|tif|tiff)' -exec sh -c 'convert -quality 100 ${1%} ${1%.*}.png && rm ${1}' _ {} \;
Název: Re:Nalezení a konvert obrázků
Přispěvatel: karel 25. 08. 2015, 05:21:50
tak tak, silenost,
no nejprve je dobre sjednotit nazvy a nez delat key senzitiv match tak proste unifikovat koncovky treba na jen mala pismena
at zije rename
Název: Re:Nalezení a konvert obrázků
Přispěvatel: trubicoid2 25. 08. 2015, 07:28:27
jen okrajova poznamka ke konverzi do png s -quality 100; to je IMHO blbost  :o

u png je v tom cisle zakodovana komprese a filtr, defaultni je 75 (komprese 7 a filtr 5 =adaptivni). Ze zkusenosti nejmensi soubory byvaji u -quality 95, naopak to vase zavadejici -quality 100 dava soubory dokonce vetsi nez je defaultni nastaveni (bud -quality 75 nebo uplne bez -quality).

http://www.imagemagick.org/script/command-line-options.php#quality (http://www.imagemagick.org/script/command-line-options.php#quality)

kdo by chtel jeste mensi png, tak muze jeste vysledek pochroustat v optimpng, advpng nebo v pngzopfli, kdyz uz se to tlaci pres nejaky skript
Název: Re:Nalezení a konvert obrázků
Přispěvatel: Honza1 26. 08. 2015, 12:24:03
Jak psal nobody, takto je to nejlepsi reseni vubec. Nejdriv PNG prevedu na BMP a pak vse na PNG, pro min. velikost QUALITY 95


find -regextype posix-extended -iregex '.*\.(png|PNG|Png)' -exec sh -c 'convert ${1%} ${1%.*}.gif && rm ${1}' _ {} \;
find -regextype posix-extended -iregex '.*\.(bmp|BMP|Bmp|tif|TIF|Tif|tiff|TIFF|Tiff|pcx|PCX|Pcx|ico|ICO|Ico|raw|RAW|Raw|gif|GIF|Gif)' -exec sh -c 'convert -quality 95 ${1%} ${1%.*}.png && rm ${1}' _ {} \;

Slo by to nejak pouzit k rozbaleni archivu, ktere se nachazeji vsude mozne ? V adresari, kde je archiv, se utvori slozka s nazvem archivu (bez pripony) a do ni se archiv rozbali a pak smaze. tar.gz je zvlastni - rozbali se primo na miste, tar.gz se smaze a nasledne .tar rozbali.
Název: Re:Nalezení a konvert obrázků
Přispěvatel: trubicoid2 26. 08. 2015, 13:58:40
jen nejak nechapu ten prvni prevod vsech png do gif, to je proc? tim se snizi pocet barev na 256, coz mozna nechces
a v druhem kroku zase ten gif se predela do png?

archivy myslis jake? zip, tar.*? tar vetsinou miva uz v sobe jeden adresar a v nem vse ostatni (zdrojaky to tak maj), zip to nemiva
libovolnej komprimovanej tar muzes najednou rozbalit v jednom kroku pomoci
Kód: [Vybrat]
tar xf tvujsoubor.tar.* sam si najde dekompresor na gz, bz2, xz a nevim co jeste
Název: Re:Nalezení a konvert obrázků
Přispěvatel: Honza1 26. 08. 2015, 14:52:32
Prevod do gif prave pro snizeni 16 777 216 barev na paletu libovolnych 256 barev, 216 barev z RGB vybere rogram, muze to byt i 256 stupnu sedi. Nevhodne pro fotky a pod. samozrejme. A pri konvertu do gif nesmi byt zapla dihertace (coz je prokladani vzoru aby to melo jakoze vic barev)

Jakim prikazem rozbalit archov vim (7z x nebo 7za x a nazev archivu). Slozky v archovu jou ruzne a nevim jake dopredu. proto to vytvoreni adresare snazvem archivu bez pripony. Seznam pripon archovu resim stejne jako u obrazku. Obecne pocet archivu je mnohem nizsi nez pocet obrazku.
Název: Re:Nalezení a konvert obrázků
Přispěvatel: trubicoid2 26. 08. 2015, 15:56:49
Prevod do gif prave pro snizeni 16 777 216 barev na paletu libovolnych 256 barev, 216 barev z RGB vybere rogram, muze to byt i 256 stupnu sedi. Nevhodne pro fotky a pod. samozrejme. A pri konvertu do gif nesmi byt zapla dihertace (coz je prokladani vzoru aby to melo jakoze vic barev)
toto jde resit jenom convertem z png do png, bez mezistupne v gif:
Kód: [Vybrat]
-depth 8 -type Palette
jinak na hromadny convert se ma pouzivat morgify, ze stejnyho balicku

Jakim prikazem rozbalit archov vim (7z x nebo 7za x a nazev archivu). Slozky v archovu jou ruzne a nevim jake dopredu. proto to vytvoreni adresare snazvem archivu bez pripony. Seznam pripon archovu resim stejne jako u obrazku. Obecne pocet archivu je mnohem nizsi nez pocet obrazku.

ja jen ze jsi chtel prvne dekomprimovat tar a pak az se zabyvat tim tarem, i kdyz to jde krasne jednim prikazem
Název: Re:Nalezení a konvert obrázků
Přispěvatel: nobody 26. 08. 2015, 17:15:07
find -regextype posix-extended -iregex '.*\.(png|PNG|Png)' -exec sh -c 'convert ${1%} ${1%.*}.gif && rm ${1}' _ {} \;
find -regextype posix-extended -iregex '.*\.(bmp|BMP|Bmp|tif|TIF|Tif|tiff|TIFF|Tiff|pcx|PCX|Pcx|ico|ICO|Ico|raw|RAW|Raw|gif|GIF|Gif)' -exec sh -c 'convert -quality 95 ${1%} ${1%.*}.png && rm ${1}' _ {} \;
jen detail ;) iregex je case insensitive, tedy regex kterej si nevsima velikosti pismen, viz manual pro find:
Citace
-iregex pattern
              Like -regex, but the match is case insensitive.
takze opravdu staci pro vsechny kombinace, tedy nejen png,PNG,Png ale i pNG, pNg, pnG, PNg, PnG zadat pouze png...
Kód: [Vybrat]
find -regextype posix-extended -iregex '.*\.(png)' -exec sh -c 'convert ${1%} ${1%.*}.gif && rm ${1}' _ {} \;
find -regextype posix-extended -iregex '.*\.(bmp|tif|tiff|pcx|ico|raw|gif)' -exec sh -c 'convert -quality 95 ${1%} ${1%.*}.png && rm ${1}' _ {} \;
Název: Re:Nalezení a konvert obrázků
Přispěvatel: nobody 26. 08. 2015, 18:34:20
Kód: [Vybrat]
# pro nazev.tar.cokoliv vytvori adresar nazev (bez .tar.cokoliv) a rozbalit pomoci tar s uvedenim vystupniho adresare pomoci -C nazev
find -iname '*.tar.*' -exec sh -c 'mkdir ${1%.tar*}; tar xvf ${1%} -C ${1%.tar*} && rm ${1}' _ {} \;

# nebo pro nazev.tar.konkretni_pripony vytvori adresar nazev (bez .tar.pripona) a rozbalit pomoci tar s uvedenim vystupniho adresare pomoci -C nazev
find -regextype posix-extended -iregex '.*tar\.(bz2|gz|xz)' -exec sh -c 'mkdir ${1%.tar*}; tar xvf ${1%} -C ${1%.tar*} && rm ${1}' _ {} \;

# ostatni rozbalit pomoci 7z s uvedenim vystupniho adresare pomoci -onazev (odebrana (posledni) pripona, nutno zadat bez mezery za o, 7z sam neexistujici adresare vytvari)
find -regextype posix-extended -iregex '.*\.(arj|zip|rar)' -exec sh -c '7z x ${1%} -o${1%.*} && rm ${1}' _ {} \;
Název: Re:Nalezení a konvert obrázků
Přispěvatel: Honza1 28. 08. 2015, 17:00:32
Diky

Takto to funguje mnohem rychleji a lip, navic neni problem s mezery.

Muj uplne prvni skript na toto (i na konvert obrazku) byl toto:

cd "${W}${WO}/"
for AU in `ls -d */ |  tr -d "/"`; do
cd "${W}${WO}/${AU}/"
for BU in `ls -d */ |  tr -d "/"`; do
cd "${W}${WO}/${AU}/${BU}/"
for CU in `ls -d */ |  tr -d "/"`; do
cd "${W}${WO}/${AU}/${BU}/${CU}/"
for XU in `ls -d */ |  tr -d "/"`; do
cd "${W}${WO}/${AU}/${BU}/${CU}/${XU}/"
for TU in `ls -d */ |  tr -d "/"`; do
cd "${W}${WO}/${AU}/${BU}/${CU}/${XU}/${TU}/"
for KU in `ls -d */ |  tr -d "/"`; do
cd "${W}${WO}/${AU}/${BU}/${CU}/${XU}/${TU}/${KU}/"
for LU in `ls -d */ |  tr -d "/"`; do
cd "${W}${WO}/${AU}/${BU}/${CU}/${XU}/${TU}/${KU}/${LU}/"
for MU in `ls -d */ |  tr -d "/"`; do
cd "${W}${WO}/${AU}/${BU}/${CU}/${XU}/${TU}/${KU}/${LU}/${MU}/"
for NU in `ls -d */ |  tr -d "/"`; do
cd "${W}${WO}/${AU}/${BU}/${CU}/${XU}/${TU}/${KU}/${LU}/${MU}/${NU}/"
for OU in `ls -d */ |  tr -d "/"`; do
cd "${W}${WO}/${AU}/${BU}/${CU}/${XU}/${TU}/${KU}/${LU}/${MU}/${NU}/${OU}/"
ls
cd "${W}${WO}/${AU}/${BU}/${CU}/${XU}/${TU}/${KU}/${LU}/${MU}/${NU}/${OU}/"

STRAAAASNE MOC PRIKAZU PRO RUZNE VARIANTY

HODNEKRAT DONE

Coz bylo casove nic moc, nez to projelo vsechny slozky. Navic mezera byla problem. U archivu jeste OK, ale u obrazku to znamenalo nekdy zacykleni a konvert v jede slozce parad dokola.

Diky za napad, vypocetni cas znacne ubyde.
Název: Re:Nalezení a konvert obrázků
Přispěvatel: Honza1 05. 09. 2015, 00:39:01
Takže celkově pro konvert obrázků postačí toto ? Přez GIF tedy jít nemusím, ale rovnou do PNG hloubky 8 bit, pro minimální velikost quality 95.

Co se ale stane, když PNG je i původní obrázek ? To by byl i výsledek smazát, takže u formátu PNG se např přez GIF musí.

Výsldedek tedy takto:

find -regextype posix-extended -iregex '.*\.(png)' -exec sh -c 'convert ${1%} ${1%.*}.gif && rm ${1}' _ {} \;
find -regextype posix-extended -iregex '.*\.(bmp|tif|tiff|pcx|ico|raw|gif)' -exec sh -c 'convert -quality 95 -depth 8 -type Palette ${1%} ${1%.*}.png && rm ${1}' _ {} \;
Název: Re:Nalezení a konvert obrázků
Přispěvatel: Honza1 05. 09. 2015, 01:01:54
Nobody

Kód: [Vybrat]
# pro nazev.tar.cokoliv vytvori adresar nazev (bez .tar.cokoliv) a rozbalit pomoci tar s uvedenim vystupniho adresare pomoci -C nazev
find -iname '*.tar.*' -exec sh -c 'mkdir ${1%.tar*}; tar xvf ${1%} -C ${1%.tar*} && rm ${1}' _ {} \;
U souboru Soubor.tar.neco vytvori v miste slozku Soubor/ a obsah taru rozbali do nej ?
Kód: [Vybrat]
find -iname '*.tar.*' -exec sh -c 'mkdir ${1%.tar*}; tar xvf ${1%} -C ${1%.tar*} && rm ${1}' _ {} \;

Ostatni archivy, ktere mohou obsahovat vice souboru i adresaru takto:
Kód: [Vybrat]
find -regextype posix-extended -iregex '.*\.(arj|zip|rar|bz2|bz|z|bzip|bzip2|7z|jar)' -exec sh -c '7z x ${1%} -o${1%.*} && rm ${1}' _ {} \;
U gzip (ne tar.gz), kde je jen jeden soubor v archivu rozbbalim archiv takto (primo v miste, kde se nachazi, slozku nevytvarima archiv smazu)?
Kód: [Vybrat]
find -regextype posix-extended -iregex '.*\.(gz)' -exec sh -c '7z x ${1%} && rm ${1}' _ {} \;
## Nebo
find -regextype posix-extended -iregex  '.*\.(gz)'  | xargs gunzip -d
## Pricemz by se mel *.gz smazat, nebo se prida jeste:
find -regextype posix-extended -iregex  '.*\.(gz)'  | xargs rm
Název: Re:Nalezení a konvert obrázků
Přispěvatel: trubicoid2 05. 09. 2015, 10:46:14
Co se ale stane, když PNG je i původní obrázek ? To by byl i výsledek smazát, takže u formátu PNG se např přez GIF musí.

ne, nemusis jit pres gif, muzes udelat treba toto:
Kód: [Vybrat]
find -regextype posix-extended -iregex '.*\.(png)' -exec sh -c 'convert ${1%} -depth 8 -type Palette -quality 95 /tmp/tmp.png && mv /tmp/tmp.png ${1}' _ {} \;vyhoda je, ze treba pruhlednost zustane a vyhnes se gifu

no nevim, ceho chces jako dosahnout a proc redukujes tu paletu? jen aby ty soubory byly mensi?
pak treba zrovna ten zopflipng jednak vic komprimuje a jeste pritom umi redukci palety a neviditelnych casti (pustit po konverzi vseho do png)
Kód: [Vybrat]
... zopflipng -m --lossy_8bit --lossy_transparent ${1%} /tmp/tmp.png ...jenom ten zopfli algoritmus je pomaly, takze velke --iterations a -m je pomale (muzes vynechat) a jestli i tak bude pomale, tak pridat -q
Název: Re:Nalezení a konvert obrázků
Přispěvatel: trubicoid2 05. 09. 2015, 11:03:22
U souboru Soubor.tar.neco vytvori v miste slozku Soubor/ a obsah taru rozbali do nej ?

jezkovy, tak si to treba zkus, ne?  :o

U gzip (ne tar.gz), kde je jen jeden soubor v archivu rozbbalim archiv takto (primo v miste, kde se nachazi, slozku nevytvarima archiv smazu)?

no a proc gz neudelas stejne jako ostatni jednousoborove komprese bz2, xz, lzma, rzip? jestli nechces podadresar, tak proste vynech -o za 7z