Originariamente inviato da valer_85
ecco un altro problema...
devo passare allo script una directory e di questa directory devo contare il numero dei file e dei link e delle sottocartelle...nel caso di una sottodirectory devo entrare dentro di essa ricorsivamente... ecco la mia idea, xò non funziona xkè ogni volta ke ricomincia la ricorsione le variabili si riazzerano...
Uhm ... non è banale!
In questo caso, lo script eseguito in maniera ricorsiva dovrebbe poter restituire dei dati al padre in modo da effettuare una sommatoria ma ... uno script "figlio" non può modificare le variabili del padre e neanche (in modo semplice) restituire dei dati.
Io lo farei così (sempre usando la ricorsione, ma tramite una funzione):
codice:
#!/bin/bash
function count_dir_informations ()
{
local DIR="$1"
cd "$DIR"
for F in *; do
if [ "$F" != "." -a "$F" != ".." ]; then
if [ -d "$F" ]; then
COUNT_D=$[COUNT_D+1]
if [ -x "$F" ]; then
count_dir_informations "$DIR/$F"
cd $DIR
else
echo "Impossibile entrare in $DIR/$F"
fi
elif [ -f "$F" ]; then
COUNT_F=$[COUNT_F+1]
elif [ -L "$F" ]; then
COUNT_L=$[COUNT_L+1]
fi
fi
done
}
COUNT_F=0
COUNT_D=0
COUNT_L=0
glob_dot_filenames=1
count_dir_informations $1
echo "Numero di file: $COUNT_F"
echo "Numero di directory: $COUNT_D"
echo "Numero di link: $COUNT_L"
Se però ci sono dei link "circolari" o dei link che puntano a directory più sopra (nell'albero delle directory) .... credo che lo script sia fottuto.