Nowe posty

Autor Wątek: Rekurencyjne przeszukiwanie katalogów w powłoce bash  (Przeczytany 8199 razy)

JrQ-

  • Gość
Witajcie, mam pewien problem, mianowicie muszę napisać skrypt (bash), który wyswietli mi drzewo katalogowe, oto co udalo mi sie napisac:

#!/bin/bash
szukaj()
{
 for plik in *
 do
     if [ -d $plik ]
         then
             echo $plik
             cd $plik
             szukaj
         else
             cd .
     fi
 done
}

szukaj
Niestety, nie dziala jak nalezy, prosilbym o pomoc w napisaniu tego...

Offline Robert

  • Administrator
  • Guru
  • *****
  • Wiadomości: 2516
    • Zobacz profil
Rekurencyjne przeszukiwanie katalogów w powłoce bash
« Odpowiedź #1 dnia: 2011-01-01, 16:27:40 »
man find :-)
Zanim popełnisz grafomaństwo: 1 | 2 | 3
Baza RPM Jak szukać informacji

JrQ-

  • Gość
Rekurencyjne przeszukiwanie katalogów w powłoce bash
« Odpowiedź #2 dnia: 2011-01-01, 18:15:47 »
Bez użycia finda ;]
Z findem to przeciez by bylo za prosto :P

darko

  • Gość
Rekurencyjne przeszukiwanie katalogów w powłoce bash
« Odpowiedź #3 dnia: 2011-01-01, 18:59:39 »
W pętli for w miejsce wywołania funkcji szukaj wstaw /sciezka_do_twojego_skryptu/nazwa_twojego_skryptu. Samą funkcję również bym usunął, gdyż zajmuje niepotrzebnie aż 4 linie kodu.

kostuch

  • Gość
Rekurencyjne przeszukiwanie katalogów w powłoce bash
« Odpowiedź #4 dnia: 2011-01-01, 19:38:48 »
Może w taki sposób?

#!/bin/bash

rfind()
{
    cd "$1"
    for f in *; do
if [ -d "$f" ]; then
            echo "$f"
   rfind "$f"
fi
    done
    cd ../
}

dir="."

if [ -n "$1" ]; then
    dir="$1"
fi

rfind "$dir"
---

Przyznaję, że chyba wrzuciłem nie tę wersję skryptu którą chciałem... Poprawiłem skrypt i teraz wypisuje wszystkie katalogi zaczynając od podanego jako pierwszy argument.

---

Wersja z formatowaniem tekstu:

#!/bin/bash

i=0
rfind()
{
    i=$(($i+1))
    cd "$1"
    for f in *; do
if [ -d "$f" ]; then
   j=0
   while [ "$j" -lt "$i" ]; do
echo -ne "\\t"
j=$(($j+1))
   done
   echo -ne "$f\\n"
   rfind "$f"
fi
    done
    cd ../
    i=$(($i-1))
}

dir="."

if [ -n "$1" ]; then
    dir="$1"
fi

echo "$dir"
rfind "$dir"

Offline Robert

  • Administrator
  • Guru
  • *****
  • Wiadomości: 2516
    • Zobacz profil
Rekurencyjne przeszukiwanie katalogów w powłoce bash
« Odpowiedź #5 dnia: 2011-01-01, 23:13:55 »
kostuch, czy ty w ogóle wykonałeś to, co napisałeś?
I czy czytałeś pierwszy post?
Zanim popełnisz grafomaństwo: 1 | 2 | 3
Baza RPM Jak szukać informacji