+ -
当前位置:首页 → 问答吧 → 比较两个目录树底下的文件

比较两个目录树底下的文件

时间:2011-07-04

来源:互联网

现有两个结构一模一样的目录树 dir1 dir2
dir1 -- dir11 -- file1
       -- dir12 -- dir13 --file2
       ......................

dir2 -- dir11 -- file1
       -- dir12 -- dir13 --file2
       ......................


现要比较dir1 dir2 两个目录下的每个同名文件, 假如同名文件内容不同, 就把不同内容拷到 dir3 , 还要保持目录结构。

不知大侠们有没有好办法?

作者: oguy99   发布时间: 2011-07-04

cd dir1
find . -type f | {
while read f;do
     diff ../dir2/$f $f
     ...
done
}

作者: cjaizss   发布时间: 2011-07-04



QUOTE:
cd dir1
find . -type f | {
while read f;do
     diff ../dir2/$f $f
     ...
done
}
cjaizss 发表于 2011-07-04 12:52




    这么写有问题吧?多层目录……

作者: xiaopan3322   发布时间: 2011-07-04

本帖最后由 yinyuemi 于 2011-07-04 13:58 编辑

回复 oguy99
  1. mkdir dir3;mkdir dir3/dir12 dir3/dir13;find dir1/ -type f |while read line
  2. do
  3.    if diff $line ${line/dir1/dir2} >/dev/null
  4.    then
  5.       continue
  6.    else
  7.       dir=${line%/*}
  8.       diff $line ${line/dir1/dir2} >${line##*/}
  9.       mv ${line##*/} ${dir/dir1/dir3/}
  10.    fi
  11. done
复制代码

作者: yinyuemi   发布时间: 2011-07-04



QUOTE:
这么写有问题吧?多层目录……
xiaopan3322 发表于 2011-07-04 13:03




    重定向之前mkdir -p一下好了

作者: cjaizss   发布时间: 2011-07-04

本帖最后由 xiaopan3322 于 2011-07-04 13:20 编辑

回复 yinyuemi


    很多拼写错误,
   1, -type -f -> -type f
   2, mikdir -> mkdir
   3, mkdir -> mkdir -p

作者: xiaopan3322   发布时间: 2011-07-04



QUOTE:
回复  yinyuemi


    很多拼写错误,
   1, -type -f -> -type f
   2, mikdir -> mkdir
   3, mk ...
xiaopan3322 发表于 2011-07-04 13:16




    是的,改了

作者: yinyuemi   发布时间: 2011-07-04