bash - struktura katalogów

Potrzebujesz pomocy z C, C++, perl, python, itp.
RRH
Beginner
Posty: 140
Rejestracja: 27 października 2006, 21:09

bash - struktura katalogów

Post autor: RRH »

witam!

Jak przerobić poniższy skrypt, aby wyświetlał tak strukturę katalogów:

Kod: Zaznacz cały

rekurencja/
               |
               |-----subdir01/
               |                  |
               |                  |-----file01
               |                  |-----file02
               |                  |-----file03
               |-----subdir02/
               |-----subdir03/

Kod: Zaznacz cały

recls ()
{
        singletab="\t"
        for tryfile in "$@"; do
                echo $tryfile
                if [ -d "$tryfile" ]; then
                        thisfile=$tryfile
                        recdir $(command ls $tryfile)
                fi
        done

        unset singletab tab
        echo
}

Kod: Zaznacz cały

recdir ()
{
        tab=$tab$singletab

        for file in "$@"; do
                echo -e $tab$file
                thisfile=$thisfile/$file
                if [ -d "$thisfile" ]; then
                        recdir $(command ls $thisfile)
                fi

                thisfile=${thisfile%/*}
        done

        tab=${tab%"$singletab"}
}
uruchamianie:
recls katalog

[ Dodano: 2006-12-29, 10:59 ]
Skrypt wyszedł trochę "koślawy", ale działa.

Kod: Zaznacz cały

draw ()
{
	pipeLine=""
	link="--------"
	declare -i tabNum=$(echo -e  $tab | wc -m)
	tabNum=$((--tabNum))

	for (( i=1; i<=tabNum; i++ ))
	do
		pipeLine=$pipeLine${singleTab}\|
	done
	#wypisanie lini zawierającej znaki '|' oraz końcowy łącznik
	echo -en $pipeLine$link
}

Kod: Zaznacz cały

recls ()
{
	singleTab="\t"

	for tryfile in "$@"; do
		echo $tryfile
		if [ -d "$tryfile" ]; then
			thisfile=$tryfile
			recdir $(command ls $tryfile)
		fi
	done

	unset singleTab tab pipeLine link tabNum
	# pusta linia oddzielająca kolejne drzewa katalogów
	echo
}

Kod: Zaznacz cały

recdir ()
{
	#dodanie nowego tabulatora
	tab=$tab$singleTab

	for file in "$@"; do
		#rysowanie struktury drzewa
		draw
		#wypisanie nazwy pliku
		echo $file
		thisfile=$thisfile/$file
		if [ -d "$thisfile" ]; then
			recdir $(command ls $thisfile)
		fi

		thisfile=${thisfile%/*}
	done
	#plik nie jest katalogiem - usunięcie jednego tabulatora
	tab=${tab%"$singleTab"}
}
ODPOWIEDZ