2016-03-03 2 views
0

У меня есть следующий фрагмент кода:Рекурсия цикл не начинается

count=0 

countIt(){ 

cd "$1" 

for d in "$1"; do 
if [ -d $d ]; 
    then 
    count=$((count+1)) 
    countIt "$d" 
fi 
done 

} 

И я вызываю эту функцию каталога в качестве аргумента.

То, что я пытаюсь сделать здесь, рекурсивно подсчитывает, сколько раз эта функция будет проходить через каталоги, расположенные внутри каталога, в котором я передаю аргумент при вызове функции.

Я только поместил каталоги в эту начальную папку, чтобы проверить функциональность, но оператор if, похоже, не работает как истинный, поэтому рекурсия никогда не произойдет.

Я совершенно новый для оболочки, и я искал некоторые рекурсивные функции в Интернете, но я до сих пор не могу понять, что я сделал неправильно, поэтому любой совет будет оценен!

+0

Это для удовольствия или вы действительно хотите подсчет каталогов в дереве? –

ответ

0

Попробуйте положить это в файле countdirs.sh:

count=0 

countIt(){ 
    for d in "$1"/*; do 
    if [ -d "$d" ]; then 
     count=$((count+1)) 
     countIt "$d" 
    fi 
    done 
} 
countIt "$1" 
echo "Found $count directories and subdirectories" 

Затем запустите:

chmod +x countdirs.sh 
./countdirs.sh somedir 

Где somedir это каталог для подсчета подкаталоги на.

Но вы могли бы рассчитывать, выполнив:

find "$1"/* -type d | wc -l 

Запустить первую часть (до трубы |), так что вы видите выход, то вы поймете, что туалет -l подсчитывает количество строк из выход по трубопроводу.

+0

Правда, смешно, что у меня все получилось, но забыл исправить там ... Спасибо – Eduardo

+0

Просто добавив/* не сделал трюк. Что именно это значит? Также не могли бы вы объяснить часть «-maxdepth 0 | wc -l» инструкции find? – Daeto

+0

Обновлен мой ответ. – Eduardo

Смежные вопросы