Visualizzazione dei risultati da 1 a 3 su 3
  1. #1

    [BASH-LINUX] Visita ricorsiva file system

    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

  2. #2
    Utente di HTML.it L'avatar di andbin
    Registrato dal
    Jan 2006
    residenza
    Italy
    Messaggi
    18,284

    Re: [BASH-LINUX] Visita ricorsiva file system

    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
    Andrea, andbin.devSenior Java developerSCJP 5 (91%) • SCWCD 5 (94%)
    java.util.function Interfaces Cheat SheetJava Versions Cheat Sheet

  3. #3
    ops.. errore sciocco derivato dalla programmazione ad alto livello, dove c'è già tutta la "pappa pronta"

    Grazie!!!!

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2025 vBulletin Solutions, Inc. All rights reserved.