比较两个目录并将不同的子目录复制到第三个目录

比较两个目录并将不同的子目录复制到第三个目录

我有 2 个目录 DIR1 和 DIR2

DIR1 是基本目录,经常出现新的更改,有时还会出现新的子目录。 DIR2 具有旧版本的文件。

我想比较这两个目录,这样如果 DIR1 的任何子目录有任何文件与 DIR2 的相应子目录是新的/不同的,它应该将整个相应的子目录复制到 DIR3。

因此,DIR3 应该包含已通过更改标识的所有子目录。

答案1

 for dir in $(find DIR1 -type d) ;do
   newdir=$(echo ${dir} | sed -e "1,1s/^DIR1/DIR3/")
   mkdir -p ${newdir}
 done

上面的块在 DIR3 下创建 DIR1 中的所有目录。如果您要在 DIR1 下创建新目录,而该目录不在 DIR2 中,则应在 DIR1 下有新目录时运行此代码段,否则,运行一次就足够了

然后:

for file in $(find DIR1 -type f) ;do
  oldfile=$(echo ${file} | sed -e "1,1s/^DIR1/DIR2/")
  if [ -f ${oldfile} ]
  then
    diff ${file} ${oldfile} >/dev/null; r=${?}
    if [ $r -ne 0 ]
    then
      newfile=$(echo ${file} | sed -e "1,1s/^DIR1/DIR3/")
      cp ${file} ${newfile}
    fi
  else
    newfile=$(echo ${file} | sed -e "1,1s/^DIR1/DIR3/")
    cp ${file} ${newfile}
  fi
done

相关内容