Рекурсивная логика в скриптах оболочки - PullRequest
0 голосов
/ 04 января 2011

Вот проблема, для которой мне нужно решить:

Скажите, что файл A содержит имена файлов B, C, D.И файл B содержит имена файлов E, F, G и т. Д. Файл C содержит имена файлов H, I, J и т. Д. *

Я должен проанализировать файлы, начиная с A, ископируйте файлы, упомянутые в А, в каталог DIR.Я хочу выполнить такой же анализ всех дочерних файлов B, C, D и получить их дочерние файлы в мой каталог DIR.Это должно продолжаться, пока я не достигну последнего файла, скажем Z, который не содержит никаких других имен файлов.

Как мне это сделать?

Я хочу сделать все это в одном сценарии, и любая дальнейшая оптимизация приветствуется.

Заранее спасибо.

1 Ответ

0 голосов
/ 04 января 2011

Если файлы содержат данные, отличные от имен файлов, может потребоваться дополнительная обработка.

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"
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...