Portál AbcLinuxu, 27. července 2025 09:14


Dotaz: bash - soubory s mezerami v názvu

30.3.2007 22:20 vice | skóre: 21
bash - soubory s mezerami v názvu
Přečteno: 199×
Odpovědět | Admin
Zdravím všechny, mám problém s bash skriptem: mám soubory s mezerou v názvu:
ls -Q *.txt
"AA BB.txt" "CC DD.txt" "EE FF.txt"
když zkusím
for XXX in "AA BB.txt" "CC DD.txt" "EE FF.txt"; do echo $XXX; done
AA BB.txt
CC DD.txt
EE FF.txt
což je dobře, bohužel "naostro" to dopadne špatně
for XXX in `ls -Q *.rtf`; do echo $XXX; done
"AA
BB.txt"
"CC
DD.txt"
"EE
F.txt"
Proč mi to ta mrcha bash dělá ???
Není důležité co se stane, ale jak se to vysvětlí.
Nástroje: Začni sledovat (1) ?Zašle upozornění na váš email při vložení nového komentáře.

Odpovědi

30.3.2007 22:24 al-Quaknaa | skóre: 13 | blog: al_quaknaa
Rozbalit Rozbalit vše Re: bash - soubory s mezerami v názvu
Odpovědět | | Sbalit | Link | Blokovat | Admin

Vůbec si nejsem jistý a s bashem to neumím, takže jenom střela do prázdna: mezera má escape sekvenci "\ ", jakože třeba pokdu chci jít do adresáře "dd aa", tak musím dát "cd dd\ aa". Ale možná je to úplně mimo...

30.3.2007 22:27 vice | skóre: 21
Rozbalit Rozbalit vše Re: bash - soubory s mezerami v názvu
jo, puvodne jsem to tak chtel udelat, ale vysledek je stejny (spatny)
Není důležité co se stane, ale jak se to vysvětlí.
David Watzke avatar 30.3.2007 22:28 David Watzke | skóre: 74 | blog: Blog... | Praha
Rozbalit Rozbalit vše Re: bash - soubory s mezerami v názvu
Odpovědět | | Sbalit | Link | Blokovat | Admin
OMG, co to zkoušíš?
for XXX in *.rtf; do echo "$XXX"; done
“Being honest may not get you a lot of friends but it’ll always get you the right ones” ―John Lennon
30.3.2007 22:31 vice | skóre: 21
Rozbalit Rozbalit vše Re: bash - soubory s mezerami v názvu
ooooooooo, díky, dlouhý týden a špatný den :-(
Není důležité co se stane, ale jak se to vysvětlí.
30.3.2007 23:00 Messa | skóre: 39 | blog: Messa
Rozbalit Rozbalit vše Re: bash - soubory s mezerami v názvu
Odpovědět | | Sbalit | Link | Blokovat | Admin
Prohlédni si výstup příkazu ls a uvědom si, jak pracuje for – rozděluje podle bílých znaků, více viz man bash. Ten for neví, že má vstup z ls a že má tedy rozdělovat jen podle \n (nových řádků). Tak mu to řekneme:
( IFS='\n'; for x in `ls *`; do echo $x; done )
Mimochodem, doporučuji také příkazy find a xargs ;-)
David Watzke avatar 30.3.2007 23:10 David Watzke | skóre: 74 | blog: Blog... | Praha
Rozbalit Rozbalit vše Re: bash - soubory s mezerami v názvu
Máš sice pravdu, ale tohle hlavně nepoužívat :-( 2 zbytečný subshelly a ještě taková hrůza `ls *` ;-)
“Being honest may not get you a lot of friends but it’ll always get you the right ones” ―John Lennon

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.