2015-05-10 8 views
-1

У меня есть задача создать двоичное дерево каталогов в оболочке bash, глубина дается в качестве первого аргумента скрипта. Каждый каталог должен быть назван вторым аргументом + глубиной дерева, каталог находится вДвоичное дерево каталогов UNIX

. Пример: имя ./tree.sh 3 следует создать следующую структуру:

     name11 
        /  \ 
       name21   name22 
       / \  / \ 
      name31 name32 name33 name34 

Я надеваю У меня действительно есть идея, как это сделать, даже не начинать. Это сложнее, чем все, что я делал в bash до сих пор. Любая помощь будет очень оценена. Спасибо заранее.

+1

вы знаете, как сделать это на другом языке, чем Bash? –

+0

Что вы делаете, если в каталоге имеется более двух подкаталогов? –

+0

Нет, не очень, никогда не работал над такими проблемами. Вот почему я прошу о помощи :) – mouseepaad

ответ

0

С рекурсией:

#!/bin/bash 

level=$1 
current_level=$2; current_level=${current_level:=1} 
last_number=$3; last_number=${last_number:=1} 
prefix="name" 

# test to stop recursion 
[[ $level -eq $(($current_level-1)) ]] && exit 

# first node 
new_number=$(($current_level*10+$last_number*2-1)) 
mkdir "$prefix$new_number" 
(
    cd "$prefix$new_number" 
    $0 $level $(($current_level+1)) $(($last_number*2-1)) & 
) 

# second node, not in level 1 
if [[ $current_level -ne 1 ]]; then 
    new_number=$(($current_level*10+$last_number*2)) 
    mkdir "$prefix$new_number" 
    cd "$prefix$new_number" 
    $0 $level $(($current_level+1)) $(($last_number*2)) & 
fi 

Теста с ./tree.sh 3

+0

Спасибо за помощь. – mouseepaad

+0

Будьте осторожны с большими числами, чтобы избежать [вилочной бомбы] (http://en.wikipedia.org/wiki/Fork_bomb). – Cyrus

+0

Чтобы предотвратить использование вилочной бомбы в Linux, отредактируйте количество процессов, которые пользователь может создать, например. 'ulimit -u 30' – Alan

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