Portál AbcLinuxu, 8. května 2025 00:53

Dotaz: Problém s kódem

21.9.2012 11:42 noems
Problém s kódem
Přečteno: 374×
Odpovědět | Admin
Ahoj, nevidíte někdo chybu? :-( Už vážně netuším proč to nevypisuje to co má. Díky za případnou pomoc.
#!/bin/bash

for DIR in $(ls /home/virt/)
do
     for FILE in $(ls /home/virt/$DIR/cnf/)
     do
          echo "/home/virt/$DIR/$FILE" 
     done
done
Nástroje: Začni sledovat (0) ?Zašle upozornění na váš email při vložení nového komentáře.

Odpovědi

21.9.2012 12:00 Šangala | skóre: 56 | blog: Dutá Vrba - Wally
Rozbalit Rozbalit vše Re: Problém s kódem
Odpovědět | | Sbalit | Link | Blokovat | Admin
A co to má dělat? Chyb je tam spousta, pár jsem jich eliminoval :-)
#!/bin/bash
OLDIFS=IFS
IFS='
'
for DIR in $(ls -1 '/home/virt/')
do
     for FILE in $(ls -1 "/home/virt/$DIR/cnf/")
     do
          echo "/home/virt/$DIR/$FILE"
     done
done
IFS=OLDIFS
To, že trpíš stihomamem, ještě neznamená, že po tobě nejdou. ⰞⰏⰉⰓⰀⰜⰉ ⰗⰞⰅⰜⰘ ⰈⰅⰏⰉ ⰒⰑⰎⰉⰁⰕⰅ ⰏⰉ ⰒⰓⰄⰅⰎ ·:⁖⁘⁙†
21.9.2012 12:20 noems
Rozbalit Rozbalit vše Re: Problém s kódem
V adresáři /home/virt/ jsou adresáře, každý tento adresář obsahuje adresář s názvem cnf ve kterém jsou soubory, tyto soubory potřebuji vypsat včetně jejich celé cesty, budou se na ně vytvářet symlinky.
Jinak netuším proč dáváš do ls 
-1
a k čemu je dobrý 
OLDIFS=IFS
IFS=''
a
IFS=OLDIFS
Jinak je výsledek úplně stejný, nejede to.
ls: cannot access /home/virt/......
......./cnf/: No such file or directory
Všechny adresáře opravdu existuji...

Jendа avatar 21.9.2012 13:13 Jendа | skóre: 78 | blog: Jenda | JO70FB
Rozbalit Rozbalit vše Re: Problém s kódem
Jinak netuším proč dáváš do ls 
-1
Aby to vypisovalo jen jeden soubor na řádek. GNU ls to dělá defaultně, když je na výstupu pípa, ale nespoléhal bych na to.
a k čemu je dobrý 
OLDIFS=IFS
IFS=''
a
IFS=OLDIFS
Protože v názvu souboru může být mezera a pak se to ti rozbije. Teda ono se to rozbije i teď, ale v míň případech. mkdir $'paplon\nvankus'
21.9.2012 13:47 darkenik
Rozbalit Rozbalit vše Re: Problém s kódem
a ls -1 /home/virt/*/cnf/* nestaci ? pripadne find /home/virt/*/cnf/ -maxdepth 1 -type f
21.9.2012 13:48 Šangala | skóre: 56 | blog: Dutá Vrba - Wally
Rozbalit Rozbalit vše Re: Problém s kódem
Pomocí IFS a -1 zajistím, že se zpracují korektně i mezery v názvech.
A nedávám
IFS=''
ale
IFS='
'

Což je notný rozdíl.

Myslím, že problém bude jinde, práva nebo jiná struktura než uvádíš…
To, že trpíš stihomamem, ještě neznamená, že po tobě nejdou. ⰞⰏⰉⰓⰀⰜⰉ ⰗⰞⰅⰜⰘ ⰈⰅⰏⰉ ⰒⰑⰎⰉⰁⰕⰅ ⰏⰉ ⰒⰓⰄⰅⰎ ·:⁖⁘⁙†
21.9.2012 12:39 NN
Rozbalit Rozbalit vše Re: Problém s kódem
Odpovědět | | Sbalit | Link | Blokovat | Admin
Nebude stacit:
find /home/virt/ -type f
21.9.2012 13:04 noems
Rozbalit Rozbalit vše Re: Problém s kódem
Při použití find /home/virt/ -type f vypíše soubory i z podadresářů, tak že nee.
Jendа avatar 21.9.2012 13:09 Jendа | skóre: 78 | blog: Jenda | JO70FB
Rozbalit Rozbalit vše Re: Problém s kódem
maxdepth
21.9.2012 13:15 MadCatX
Rozbalit Rozbalit vše Re: Problém s kódem
Odpovědět | | Sbalit | Link | Blokovat | Admin
Tohle se tvářilo funkčně:
#!/bin/sh

ROOTDIR="$1"

for d in $(ls -1 "$ROOTDIR")
do
        for f in $(ls -1 "$ROOTDIR/$d")
        do
                echo "$ROOTDIR/$d/$f"
        done
done
Nejsou na tom adresáři nějak divně nastavená práva?
21.9.2012 13:18 noems
Rozbalit Rozbalit vše Re: Problém s kódem
Tohle se tvářilo funkčně:
a v $1 se očekává že bude co?
Nejsou na tom adresáři nějak divně nastavená práva?
Ne, práva jsou v pořádku
21.9.2012 16:04 l4m4
Rozbalit Rozbalit vše Re: Problém s kódem
Odpovědět | | Sbalit | Link | Blokovat | Admin
První chyba je používat `for něco in $(ls ...)' namísto find.
21.9.2012 17:53 Sten
Rozbalit Rozbalit vše Re: Problém s kódem
Odpovědět | | Sbalit | Link | Blokovat | Admin
Místo for doporučuji
ls -1 /home/virt | while read DIR; do
    …
done
Funguje to lépe než šachování s IFS :-)

Ale jinak je na tohle opravdu lepší find
21.9.2012 20:00 Kit
Rozbalit Rozbalit vše Re: Problém s kódem
Bohužel si to neporadí s některými znaky v názvu souboru. Proto je lepší naučit se používat příkaz find, který je i rychlejší.

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.