Portál AbcLinuxu, 10. května 2025 00:59

Dotaz: Script - zástupný znak "*" a mezery

5.2.2014 11:28 kyekros | skóre: 17 | Pardubice
Script - zástupný znak "*" a mezery
Přečteno: 339×
Odpovědět | Admin
Mám tu jednoduchý script a vím že můj problém mohu vyřešit hromadným přejmenováním, anebo prostě nepoužíváním mezer. Ovšem někdy se tak stane, že někdo přijde a řekne "Zvětšete mi tyto fotky ať aspoň jedna strana má 500px."

Jenže tady jsem narazil. použil jsem zástupný znak "*" v načítání proměnné, ale ona "*" si nějak nedokáže poradit s mezerou v názvu. Zvětšené soubory se mi nezapisují s původním názvem. Nedokázal by mi někdo poradit? Předem díky za každou reakci.
#!/bin/bash

mkdir zvetsene

for soubor in *.jpg ; do
convert $soubor -resize 500x500 -quality 100 zvetsene/$soubor
done  

Řešení dotazu:


Nástroje: Začni sledovat (0) ?Zašle upozornění na váš email při vložení nového komentáře.

Odpovědi

5.2.2014 11:34 Michal Kubeček | skóre: 72 | Luštěnice
Rozbalit Rozbalit vše Re: Script - zástupný znak "*" a mezery
Odpovědět | | Sbalit | Link | Blokovat | Admin

Nedělejte unáhlené závěry. Jak expanze wildcards (hvězdička), tak její použití ve for cyklu si s mezerami v názvech souborů poradí velmi dobře. Problém je až na dalším řádku, protože expanze proměnných probíhá ještě před word splitting, tj. rozsekání řádku na příkaz a parametry bere v úvahu i tu mezeru, která vznikne z expanze proměnné. Řešením je použít dvojité uvozovky:

for soubor in *.jpg; do
    convert "$soubor" -resize 500x500 -quality 100 zvetsene/"$soubor"
done  
5.2.2014 11:42 kyekros | skóre: 17 | Pardubice
Rozbalit Rozbalit vše Re: Script - zástupný znak "*" a mezery
Děkuji, za rychlou odpověď. Teď si připadám jako trotl. Uvozovky jsem použil i před tím, ale i u for cyklu a to mi nefungovalo. Děkuji za radu.

Založit nové vláknoNahoru

Tiskni Sdílej: Linkuj Jaggni to Vybrali.sme.sk Google Del.icio.us Facebook

ISSN 1214-1267, (c) 1999-2007 Stickfish s.r.o.