使用unix比较两台服务器上两个目录中的文件

时间:2014-03-06 15:07:06

标签: unix compare diff ksh

有一个类似的问题: compare files in two directory on remote server using unix

但我的情况是我无法登录远程服务器,它是客户机,所以不能使用rsync,但我可以请求客户导出目录结构,告诉我dir / file的名称,大小,md5值等。

我只想显示不同内容的文件名。

怎么做?最好用ksh ......

提前致谢。

2 个答案:

答案 0 :(得分:0)

要求客户运行命令以获取所有相关信息,例如:

find . -type f -exec ls -l {} \; | sort > remote_dir.txt

然后在本地运行相同的命令:

find . -type f -exec ls -l {} \; | sort > local_dir.txt

然后你可以使用comm比较两者,看看有什么变化。

comm -3 remote_dir.txt local_dir.txt

答案 1 :(得分:0)

这取决于文件日期和时间是否重要或文件内容......

如果日期很重要(例如,这是您正在调查的同步事项),我将使用find运行ls -l

如果内容很重要,我想检查MD5校验和,如下所示:

find . -type f -print -exec md5 -q {} \;   > somefile

这给出了这样的输出:

./West Wales 14-Oct-09.axe
2c0c390bfc4206b8b88e11d537eacda8
./wl
44f84a91a98da15381a198e29417170c
./YOURFILE
ea102bc16e2b449e4ac6770b73cb9c50
./YOURFILE.BAK
a6ba1946cb666cb3b88ac31e6fb3f3f0
./z.html
b4554a1044abe07fd23d4580dd3055cc

然后在本地计算机上,读取文件并在本地计算其校验和,并将其与远程校验和进行比较:

#!/bin/bash
while read fname
do
    read remotemd5
    localmd5=$(md5 -q "$fname")
    if [ $remotemd5 != $localmd5 ]; then
       echo $fname $localmd5 $remotemd5 
    fi
done < file