Skrypt bashowy wyświetlający drzewko struktury katalogów
01 grudnia, 2010Po tym jak ostatnio na zajęciach uczyliśmy się trochę basha, naszła mnie ochota, aby napisać skrypt który wypisze strukturę katalogów w postaci ładnego drzewka.
Oto co powstało:
#!/bin/sh # Title : tree # See : https://gist.github.com/743432 # Date : 2010-12-16 # Author : Damian Skrodzki <damienix1@gmail.com> # Description : Prints directory tree clr_dir='\033[1;34m' # Blue clr_fil='\033[0;33m' # Yellow clr_rst='\033[0m' # Text Reset chain() { # $1 $2 - no change # $3 - prefix for this dir # $4 - prefix for nexts [ -d "$1" ] && COLOR=$clr_dir || COLOR=$clr_fil printf "$2$3$COLOR %s$clr_rst\\n" "${1##*/}" [ -d "$1" ] && showBranch "$1" "$2$4" } # Prints branch and recursive its childs showBranch() { # $1 - current dir # $2 - current prefix for i in "$1/"* ; do set -- "$i" "$2" "$3" [ -z "$3" ] || chain "$3" "$2" '|--' '| ' set -- '' "$2" "$1" done [ -z "$3" ] || chain "$3" "$2" '`--' ' ' } shopt -s dotglob # show also hidden files using * shopt -s nullglob # return empty when pattern doesn't match dir=${1:-$PWD} if ! [ -d "$dir" ]; then echo "$dir: not a directory" >&2 exit 1 else printf "$clr_dir%s$clr_rst\\n" "$dir" showBranch "$dir" ' ' fi
Jako parametr można podać mu ścieżkę przeszukania, a jak nie to wyświetli wszystko z aktualnego katalogu.
EDIT: Po licznych wskazówkach, podpowiedziach tudzież naganach, oraz mojej walce z bashem, updatuję kod. Dzięki rozwiązaniu miny86 udało mi się pozbyć szalonych awków oraz radzić ze spacjami w nazwach. Dziękuję! ;) Niestety jeśli chodzi o znaki nowej linii to przyznam się, że dalej nie jest kolorowo. EDIT2: Wklejona wersja kodu została zmodyfikowana przez minę86, źródło link.
Napisane w Bash, Linux, Programowanie, Techblog | 40 komentarzy
