PDA

Visualizza la versione completa : [BASH]: Visita ricorsiva file system


Tuco78
19-06-2006, 13:15
Ciao, ho un problemino con la seguente funzione ricorsiva:

function CRCmaker
{
cd $1
md5sum *.class >> $CRCFILE 2>/dev/null
for i in *; do
if [ "$i" != "." -a "$i" != ".." ]; then
echo "Leggo $i"
if [ -d $i ]; then
CRCmaker $i
fi
fi
done
}

Il mio problema che la funzione non gestisce il ritorno, ovvero se il una directory trova pi di una sub-directory la funzione entra solo nella prima, mi spiego meglio; immaginando di avere il seguente albero:

MAINDIR
----SUBDIR_1
----------SUBDIR_1_1
----------SUBDIR_1_2
-----SUBDIR_2

la funzione entra in MAINDIR, entra in SUBDIR_1 ed entra in SUBDIR_1_1 ma una volta visitata questa directory termina, ovvero non risale di un livello per visitare SUBDIR_1_2 e non risale al livello superiore per visitare SUBDIR_2.
Qualcuno sa spiegarmi come mai non risale di un livello? ho tralasciato qualcosa?
Grazie in anticipo

andbin
19-06-2006, 13:49
Originariamente inviato da Tuco78
Il mio problema che la funzione non gestisce il ritorno, ovvero se il una directory trova pi di una sub-directory la funzione entra solo nella prima, mi spiego meglio; immaginando di avere il seguente albero:

MAINDIR
----SUBDIR_1
----------SUBDIR_1_1
----------SUBDIR_1_2
-----SUBDIR_2

la funzione entra in MAINDIR, entra in SUBDIR_1 ed entra in SUBDIR_1_1 ma una volta visitata questa directory termina, ovvero non risale di un livello per visitare SUBDIR_1_2 e non risale al livello superiore per visitare SUBDIR_2.
Qualcuno sa spiegarmi come mai non risale di un livello? ho tralasciato qualcosa?Perch la directory corrente una "informazione" globale, tu usi cd per entrare nelle sotto-directory ma non fai nulla per "tornare" indietro. E non lo fa certamente in automatico il comando cd!!! Non ha la "memoria" dei path precedenti ... devi gestirla tu questa "memoria" dei path!

All'inizio della funzione metti: local DIR_OLD=$PWD
Alla fine della funzione metti: cd $DIR_OLD

Tuco78
19-06-2006, 14:12
ops.. errore sciocco derivato dalla programmazione ad alto livello, dove c' gi tutta la "pappa pronta" :dh:

Grazie!!!!

Loading