LINUX « E-Pillole
Visualizzare struttura ad albero di una directory
Per svariati motivi, a volte si ha la necessità di rappresentare "graficamente" la struttura ad albero di una directory e di tutto ciò che tale directory contiene.
Ad esempio, visualizzare ricorsivamente il contenuto di una directory, può essere utile se si deve presentare la struttura di un proprio progetto, oppure molto più semplicemente può darci una mano per non perdere l'orientamento su una macchina priva di interfaccia grafica e che magari non conosciamo come le nostre tasche :)
Per ottenere tale risultato, lo strumento più comodo ed intuitivo che io conosca, è senza dubbio TREE, rilasciato sotto licenza GPL e impacchettato "da sempre" sia per Debian che per Ubuntu :)
Ovviamente, essendo il sorgente disponibile in download direttamente dal sito uffciciale, TREE è comodamente installabile su qualsiasi distribuzione Linux.
Sarà sufficiente estrarre l'archivio scaricato:
tar -zxvf tree-1.5.1.1.tgz
spostarsi all'interno della directory che verrà creata, e digitare:
make && sudo make install
Per Debian e Ubuntu, come sempre, basterà invece affidarsi al nostro miglior amico, apt, e digitare:
sudo apt-get install tree
Completata l'installazione, spulciamo un pochino tra le varie opzioni disponibili dando un rapido sguardo all'help e alle man pages:
tree --help
man tree
e facciamo qualche semplice esempio:
fede@C-DEB:~/src/tree/tree-1.5.1.1$ tree -pshu . |-- [-rw-r--r-- fede 5.2K] CHANGES |-- [-rw-r--r-- fede 18K] LICENSE |-- [-rw-r--r-- fede 1.6K] Makefile |-- [-rw-r--r-- fede 3.3K] README |-- [drwxr-xr-x fede 4.0K] man | |-- [-rw-r--r-- fede 7.5K] tree.1 | `-- [-rw------- fede 6.8K] tree.1.fr |-- [-rwxr-xr-x fede 35K] tree |-- [-rw-r--r-- fede 50K] tree.c `-- [-rw-r--r-- fede 46K] tree.o 1 directory, 9 files
Carino vero?? Ancora meglio, aggiungendo la formattazione dei caratteri in UTF-8 :)
tree -pshu --charset=UTF-8
Come si può intuire facendo un pò di prove qua e la, da qualsiasi posizione ci si trova, è possibile passare a TREE la directory di cui vogliamo visualizzare la struttura ad albero e persino greppare il contenuto della stessa:
fede@C-DEB:~$ tree -pshu src/tree/tree-1.5.1.1 | grep tree src/tree/tree-1.5.1.1 | |-- [-rw-r--r-- fede 7.5K] tree.1 | `-- [-rw------- fede 6.8K] tree.1.fr |-- [-rwxr-xr-x fede 35K] tree |-- [-rw-r--r-- fede 50K] tree.c `-- [-rw-r--r-- fede 46K] tree.o
al contrario, se non verrà passata nessuna directory, TREE stamperà la struttura della directory in cui ci si trova al momento.
Ovviamente, è altrettanto possibile redirezionare l'output del comando ad un file di testo:
tree -pshu /etc/apache2 --charset=utf8 > ~/Desktop/apache2_tree
e non solo, come avrete probabilmente notato dalle man pages, aggiungendo -H tra le opzioni, TREE è in grado di formattare l'output in HTML, ed è quindi possibile creare dei files consultabili direttemante via browser, digitando molto semplicemente:
tree -pshu -H /etc/apache2 /etc/apache2 --charset=utf8 > ~/Desktop/tree.html
Per la sua semplictà e per quello che è in grado di fare, considero TREE uno strumento davvero utile, e per l'occasione eccovi uno scriptino da utilizzare in nautilus tramite il quale sarà sufficiente cliccare sulla "cartella" di cui si vuole visualizzare la struttura ad albero, e verrà creato un file con il contenuto desiderato :)
Come ben saprete, i nostri scripts per nautilus vanno posizionati all'interno della directory ~/.gnome2/nautilus-scripts/, quindi, creiamo il nostro file:
gedit ~/.gnome2/nautilus-scripts/DirTREE
ed incolliamo quanto segue:
#!/bin/bash
current_dir=`pwd`
if [ -d "$1" ]; then
q=$(zenity --title="DirTREE" --list --width=250 --height=180 \
--text="Choose file format..." --radiolist --column "Choose" --column \
"File format" FALSE "TEXT" FALSE "HTML");
if [[ $q = "TEXT" ]]; then
save_to=$(zenity --title="DirTREE -- Save $1 TREE to..." \
--save --file-selection --confirm-overwrite \
--filename="${current_dir//\//_}_$1_TREE");
tree -pshu $current_dir/$1 --charset=utf8 > $save_to
elif [[ $q = "HTML" ]]; then
save_to=$(zenity --title="DirTREE -- Save $1 TREE to..." \
--save --file-selection --confirm-overwrite \
--filename="${current_dir//\//_}_$1_TREE.html");
tree -pshu -H $current_dir/$1 $1 \
-T $current_dir/$1_TREE --charset=utf8 > $save_to
fi
else
info=`file $1`
zenity --title="DirTREE" --error --no-wrap \
--text="ERROR: You must select a directory!!\
\r\rSELECTED FILE: $current_dir/$1\r\rFILE INFO ==>> $info"
fi
exit 0
Per creare le finestre di dialogo tramite cui scegliere il formato del file e la posizione dove salvarlo, viene utilizzato zenity, quindi, se è il caso installatelo:
sudo apt-get install zenity
rendete poi eseguibile lo script appena creato:
chmod +x ~/.gnome2/nautilus-scripts/DirTREE
riavviate nautilus e troverete TREE a portata di click :)
Naturalmente, modificate lo script secondo le vostre esigenze, e chissà, magari potrebbe anche tornarvi utile :)
Grazie mille per la segnalazione!
ciao :)
secondo me tu sei un poeta o uno scrittore :)
anyway...
il metodo + rapido ed indolore per evitare di prendere l'IP dal router ed isolarti momentamente è di digitare:
sudo /etc/init.d/networking stop
e per riabilitarla:
sudo /etc/init.d/networking start
ovviamente è necessario inserire la password...
dato che la pass ti serve anche per agire sui run levels direi che è inutile passare da un run level all'altro...dopotutto è una password...che sarà mai ;)
ciaociao
Ciò ch'io vorrei è configurare il runlevel 3 come runlevel snello e sicuro: niente cupsys, cron, ecc. ecc....e niente internet. Ora per la stampa, cron ed altre risolvo la questione mediante l'utility sysv-rc-conf, o comunque modificando i nomi dei collegamenti in /etc/rc3.d (K al posto di S, no?), mentre per quello che ho ormai inteso chiamarsi NETWORKING la faccenda è più complessa poiché lo script si avvia al boot e quindi il collegamento non è presente in rc2-3-4-5.d bensì in rcS.d (oltreché in rc0.d e rc6.d), ed interessa qundi tutti i runlevel multiusers, fors'anche il livello single-user. In effetti in sysv-rc-conf alla voce corrispondente non è indicato nulla per i runlevel in questione...e se lo disabilitassi dal level S immagino che lo disattiverei in assoluto. Inoltre in S sono presenti anche i collegamenti a ifupdown e ifupdown-clean (anche questi non presenti nei levels da 1 a 5). da quali tra questi (networking, ifudown, ifupdownclean) dipende la connessione ad inetrnet? Come lasciare l'avvio al boot della connessione (in level S) ma preservando dalla medesima l'utopico level 3? Io non vorrei disattivare il demone ma impedirgli di rompermi le balle se passo a level 3...con un telinit 3 (comando elegantissimo) vorrei entrare di colpo in uno spazio scevro di servizi non sempre utili ed isolato dalla rete. Sento che si può fare...ma non so come. Dammi un po' di teoria sennò muoio!!!
Poi avrei un altro paio di curiosità (due in una) ancor più, anzi veramente stupide...ma queste alla prossima puntata. Ciao
ma tutto questo è per un puro scopo accademico voglio sperare :)
sinceramente, non saprei come spiegare la "faccenda" dei runlevels sintetizzando tutto il discorso :(
ma davvero tu cambieresti runlevel via telinit come si faceva nella preistoria ?? :)
ciaociao
Eppoi mi pare semplice ed elegante il passaggio da un runlevel all'altro con telinit....è come ordinare al ghiaccio di diventar acqua, vapore eppoi nuovamente ghiaccio. In effetti telinit trasforma lo "stato" della macchina semplicemente dicendoglielo; tipo un "alzati e cammina". Amo la sintesi e i gesti semplici capaci di grande trasformazioni piuttosto che molti piccoli tocchi di magia. Al fine d'aver una macchina più snella (ricordo che il mio pc è un prodotto dell'industria portoghese di fine '800) e sicura (non connessa) ho pensato che configurare un runlevel con il minimo necessario per le operazioni che solitamente svolgo fosse una buona idea. Alla fine il problema si riduce solo a questo: uno script nel runlevel S parte al boot, e quindi ha valore per tutti i runlevels (da 1 a 5); non esiste link a networking in rc1-5.d poiché la sua presenza in rcS.d lo qualifica come script di un runlevel speciale (cioé la rete è attiva prima del login). L'unico problema è capire come non fare ca**ate. Ho provato a mettere in rc3.d un collegamento a networking (k20networking), ed in effetti arresta la connessione, ma appena ritorno al runlevel 2 essa pare ripristinarsi senza però l'effettiva possibilità di navigare (devo ravviare). Ho pensato anche (ma l'ho solo pensato) di togliere networking da rcS.d e metterlo in rc2.d (s20networking) mentre nel rc3.d il bel k20networking. Temo di fare danni...per questo ho bisogno della tua teoria.
>>Temo di fare danni...per questo ho bisogno della tua teoria...
eh...okkio perchè è un attimo mandare a pu**ane qualche cosa...!! :)
così a occhio, con il tuo ragionamento (togliere networking da rcS.d) , la prima cosa che mi viene in mente che può incasinarsi è NFS et similia...ma non ci giurerei...
a quest'ora poi... :)
ciaociao
- Applications Software (2)
- Debian (1)
- Devel (1)
- Distribuzioni Varie (2)
- Easy Tricks (5)
- Gnome Desktop (2)
- Guide Debian (8)
- Guide Debian Ubuntu (12)
- Guide Ubuntu (9)
- Linux Printer Drivers (1)
- Man Pages Linux (2)
- My Feeds (3)
- Off Topic (2)
- Ping at Home (1)
- Problem Solving (4)
- Server Side (2)
- Tricks Debian Ubuntu (5)
- Ubuntu (8)
- Upgrades (5)
- NFS - Condivisione file Debian Ubuntu
- Ubuntu Case Studies: storie di successo in azienda e nelle scuole
- La tentazione del lato oscuro (Google AdSense) [Ping@Home]
- Linux Man Pages On-Line
- Gestione Moduli e Virtual Hosts di Apache2 su Debian e Ubuntu
- Visualizzare struttura ad albero di una directory
- Cron + Rhythmbox + Scriptino = Sveglia
- Soluzione piccolo problema con mp32ogg
- Velocizzare la ricompilazione con ccache
- Trasformare Gedit in un editor avanzato
- People DebianClan e TuxFeed: pinguini italiani alla riscossa
- Abilitare supporto AGP driver NVIDIA
- Finalmente rilasciata la GPLv3
- Compiz Fusion + Debian Sid
- Estensione NoScript per Firefox
- Compiz Fusion + Ubuntu Feisty
- Disabilitare o modificare splash screen Gnome
- Personalizzare gnome con GNOME Color Chooser
- VOGLIO usare Ubuntu
- Cronologia comandi bash
- febbraio 2008 (1)
- gennaio 2008 (2)
- dicembre 2007 (1)
- novembre 2007 (2)
- ottobre 2007 (1)
- agosto 2007 (3)
- luglio 2007 (2)
- giugno 2007 (20)
- maggio 2007 (13)
- aprile 2007 (10)
- marzo 2007 (20)










