2017-05-28 6 views
1

Ich versuche, alle Dateien zu finden, indem einen Verzeichnisnamen in allen Unterverzeichnissen Bestehen der Prozess ist rekursiv bedeutet hier ist mein CodeRecursively Suche nach Dateien

myrecursive() { 
    if [ -f $1 ]; then 
    echo $1 
    elif [ -d $1 ]; then 
    for i in $(ls $1); do 
     if [ -f $1 ]; then 
     echo $i 
     else 
     myrecursive $i 
     fi 
    done 
    else 
    echo " sorry" 
    fi 
} 
myrecursive $1 

Jedoch, wenn ich Verzeichnis mit einem anderen Verzeichnis übergeben I 2 erhalten mal sorry, wo ist mein fehler?

+4

hilft Warum nicht einfach den Befehl find nutzen? –

+0

Ich versuche, es selbst zu implementieren, ich weiß, finden kann die Arbeit, aber das ist nicht der Punkt. –

Antwort

0

Das Ziel, das Sie einfach mit find Befehl getan werden, um zu erreichen versuchen könnte:

# will search for all files recursively in current directory 
find . * -exec echo {} \; 

# will search for all *.txt file recursively in current directory 
find . -name "*.txt" -exec echo {} \; 

# will search for all *.txt file recursively in current directory 
# but depth is limited to 3 
find . -name "*.txt" -max-depth 3 -exec echo {} \; 

man find für Handbuch. How to run find -exec?

0

Das Problem mit Ihrem Code ist ziemlich einfach.

Der Befehl ls gibt eine Liste von Dateinamen zurück, die jedoch für die Rekursion nicht gültig sind. Verwenden Sie stattdessen Globbing. Die Schleife unten einfach ersetzt $(ls) mit $1/*

myrecursive() { 
    if [ -f $1 ]; then 
    echo $1 
    elif [ -d $1 ]; then 
    for i in $1/*; do 
     if [ -f $1 ]; then 
     echo $i 
     else 
     myrecursive $i 
     fi 
    done 
    else 
    echo " sorry" 
    fi 
} 
myrecursive $1 

Hoffnung, die

0
#!/bin/bash 
myrecursive() { 
    if [ -f "$1" ]; then 
    echo "$1" 
    elif [ -d "$1" ]; then 
    for i in "$1"/*; do 
     if [ -f "$i" ]; then #here now our file is $i 
     echo "$i" 
     else 
     myrecursive "$i" 
     fi 
    done 
    else 
    echo " sorry" 
    fi 
} 
myrecursive "$1" 
+0

Benötigen doppelte Anführungszeichen um die Variablen. – codeforester

Verwandte Themen