2011-01-04 15 views
0

Hier ist ein Problem, das ich brauche Lösung für:Rekursive Logik in Shell-Skripten

Sagen, Datei A enthält Namen der Dateien B, C, D. Und Datei B enthält die Dateinamen E, F, G usw. Datei C enthält Namen der Dateien H, I, J usw.

Ich muss die Dateien von A aus analysieren und kopieren Dateien in A bis dir DIR erwähnt. Ich möchte das gleiche Parsing für alle Child-Dateien B, C, D durchführen und ihre Child-Dateien in mein Verzeichnis DIR holen. Dies sollte weitergehen, bis ich die letzte Datei, Z, erreichen kann, die keine anderen Dateinamen enthält.

Wie mache ich das?

Ich möchte die ganze Sache in einem einzigen Skript tun und jede weitere Optimierung würde geschätzt werden.

Vielen Dank im Voraus.

Antwort

0

Wenn die Dateien andere Daten als die Dateinamen enthalten, kann eine weitere Analyse erforderlich sein.

DIR="$HOME/DIR" 
startfile="a" 
counter=0 

copy_to_dir() 
{ 
    while read line ; do 
    if [ -f "$line" ] ; then 
     cp "$line" "$2" && ((counter++)) 
     copy_to_dir "$line" "$2"     # recurse 
    fi 
    done < "$1" 
} # ---------- end of function copy_to_dir ---------- 

if [ -f "$startfile" -a -d "$DIR" ] ; then 
    copy_to_dir "$startfile" "$DIR"      # start copying 
fi 

printf "'%s' : %d files copied to '%s'\n" "$0" $counter "$DIR" 
+0

Ja, es gibt ein bisschen Parsing zu tun. Ich mache die syntaktische Logik und behalte die Dateinamen in temp_A für A und so weiter .... könntest du bitte den Code ändern, um das zu reflektieren? – mnunna

+0

Ich versuchte die Logik, aber der Code wirft die folgende Nachricht auf: "Rekursion zu tief" – mnunna