Portál AbcLinuxu, 10. května 2025 07:05

Dotaz: Cysklus for a oddělovač seznamu

26.8.2011 09:28 Jiřík 1435 | skóre: 8
Cysklus for a oddělovač seznamu
Přečteno: 164×
Odpovědět | Admin
Dobry den mam nasledujici script
for s in `find /media/g0.v0.f0/BACKUPS/ -type f -mmin -1`; do
        echo $s
done
ktery vypise seznam souboru. Problem se vyskytne ve chvili kdy nazev souboru obsahuje mezeru. Jak docilim aby cyklus for pro iteraci pouzil znak noveho radku a ne prazdnou mezeru. Dekuji

Ř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

26.8.2011 09:54 l4m4
Rozbalit Rozbalit vše Re: Cysklus for a oddělovač seznamu
Odpovědět | | Sbalit | Link | Blokovat | Admin
Vždy používat -print0.

Čtení v bashi pak vyžaduje lokálně nastavit (resp. odnastavit) IFS.
while IFS= read -r -d $'\0' s; do
    echo "$s"
done < <(find /media/g0.v0.f0/BACKUPS/ -type f -mmin -1 -print0)
Přesměrování v příkladu je zapsáno, jak je zapsáno, protože find | while by byla pipeline, běžela v podprocesu a nešlo by uvnitř nastavit proměnné, aby existovaly i ve zbytku skriptu. Pokud to nevadí, lze použít normální pipeline.
26.8.2011 10:03 dustin | skóre: 63 | blog: dustin
Rozbalit Rozbalit vše Re: Cysklus for a oddělovač seznamu
Tak za tu process substitution velice děkuji, mnohokrát jsem bojoval s find | while a nedostupností proměnných ve while. O tomto řešení jsem vskutku netušil :)
26.8.2011 10:56 Jiřík 1435 | skóre: 8
Rozbalit Rozbalit vše Re: Cysklus for a oddělovač seznamu
Dik.
26.8.2011 11:18 Semo | skóre: 45 | blog: Semo
Rozbalit Rozbalit vše Re: Cysklus for a oddělovač seznamu
Odpovědět | | Sbalit | Link | Blokovat | Admin
Dufam, ze to pouzijes na nieco ine ako na zoznam suborov, ktory si mozes vypisat rovno find-om.
If you hold a Unix shell up to your ear, you can you hear the C.
26.8.2011 11:21 Jiřík 1435 | skóre: 8
Rozbalit Rozbalit vše Re: Cysklus for a oddělovač seznamu
Ovsem
26.8.2011 11:58 Jiřík 1435 | skóre: 8
Rozbalit Rozbalit vše Re: Cysklus for a oddělovač seznamu
Rad bych jeste pozadal o radu. mam nasledujici seznam souboru:
/media/g0.v0.f0/BACKUPS/W2K/B W2K2011-08-21T173503.vbk
/media/g0.v0.f0/BACKUPS/W2K/B W2K2011-08-22T170103.vib
/media/g0.v0.f0/BACKUPS/W2K/B W2K2011-08-23T170026.vib
/media/g0.v0.f0/BACKUPS/W2K/B W2K2011-08-24T170023.vib
Jak co nejelegantneji oriznu retezec '/media/g0.v0.f0/' tak at vystupem je toto:
BACKUPS/W2K/B W2K2011-08-21T173503.vbk
BACKUPS/W2K/B W2K2011-08-22T170103.vib
BACKUPS/W2K/B W2K2011-08-23T170026.vib
BACKUPS/W2K/B W2K2011-08-24T170023.vib
26.8.2011 12:21 l4m4
Rozbalit Rozbalit vše Re: Cysklus for a oddělovač seznamu
A není lepší to vůbec nevypisovat? Tj. namísto -print0

find ... -printf '%P\0'
26.8.2011 14:29 Jiřík 1435 | skóre: 8
Rozbalit Rozbalit vše Re: Cysklus for a oddělovač seznamu
Uz sem objevil prikaz sed.

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.