shell脚本中的递归逻辑

时间:2011-01-04 14:33:17

标签: unix

这是一个我需要解决方案的问题:

说文件A包含文件B,C,D的名称。文件B包含文件名E,F,G等。文件C包含文件H,I,J等的名称......

我必须解析从A开始的文件,并将A中提到的文件复制到dir DIR中。我想对所有子文件B,C,D进行相同的解析,并将他们的子文件放入我的dir DIR中。这应该继续,直到我到达最后一个文件说Z不包含任何其他文件名。

我该怎么做?

我想在一个脚本中完成整个过程,任何进一步的优化都将受到赞赏。

提前致谢。

1 个答案:

答案 0 :(得分:0)

如果文件包含除文件名之外的其他数据,则可能需要进行更多解析。

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"