递归地比较两个目录,使用shell脚本将目录内容复制到第三个目录

时间:2011-04-13 11:15:46

标签: linux shell scripting

我有两个目录说A和B. 我想比较目录B和A. 目录A和目录B有许多共同的目录(包含相同的)和文件 如果目录A中不存在文件,则通过维护目录结构将文件复制到目录C.

e.g。如果在目录A中,则不存在以下相对路径。

B/hellboy/MyScripts/dir1/

我想将此路径及后代文件和目录复制到目录C。

我使用diff命令尝试了很多。但我认为这是不可能的。请帮我摆脱这个。

2 个答案:

答案 0 :(得分:0)

看看rdiff-backuprsync的亲戚),它可能提供您想要的开箱即用。

答案 1 :(得分:0)

以下脚本代码段是否接近您要查找的内容?

#!/usr/bin/env bash

# Setup for testing:
# mkdir -p A/l1-{1,2,3}/l2-{4,5,6}
# mkdir -p B/l1-{2,3,4,5}/l2-{1,2,3,4}
# touch B/l1-{3,4,5}/l2-{2,3,4}/file-${RANDOM}
# touch {A,B}/l1-2/l2-4/never_goes_to_C

while read f d _; do 
  if [ -e "A/$f" ]; then 
    echo "---> FOUND: A/$f"
  else
    echo "---> NOT FOUND: A/$f, moving to C"
    mkdir -p "C/$d" && cp -a "B/$f" "C/$d"
  fi;
done < <(cd B; find . -printf "%p %h\n")