一千萬個為什麽

搜索

shell腳本中的遞歸邏輯

這是一個我需要解決方案的問題:

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

我必須解析從A開始的文件,並將A中提到的文件復制到dir DIR。我想對所有子文件B,C,D進行相同的解析,並將他們的子文件放入我的dir DIR中。這應該繼續,直到我到達最後一個文件說Z不包含任何其他文件名。

我怎麽做?

我想在一個腳本中完成整個過程,任何進一步的優化都將受到贊賞。

提前致謝。

最佳答案

如果文件包含除文件名之外的其他數據,則可能需要更多解析。

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"

轉載註明原文: shell腳本中的遞歸邏輯