比较两个目录下的文件是否一致
题目要求
有两台Linux服务器A和B,假如A可以直接ssh到B,不用输入密码。A和B都有一个目录叫做/data/web/ 这下面有很多文件,
当然我们不知道具体有几层子目录,假若之前A和B上该目录下的文件都是一模一样的。
但现在不确定是否一致了。固需要我们写一个脚本实现这样的功能,检测A机器和B机器/data/web/目录下文件的异同,我们以A机器上的文件作为标准。
比如,假若B机器少了一个a.txt文件,那我们应该能够检测出来,或者B机器上的b.txt文件有过改动,我们也应该能够检测出来(B机器上多了文件不用考虑)。
参考答案
#!/bin/bash dir=/data/web [ -f /tmp/md5.list ] && rm -f /tmp/md5.list find $dir/ -type f > /tmp/file.list while read line do md5sum $line >> /tmp/md5.list done < /tmp/file.list scp /tmp/md5.list B:/tmp/ [ -f /tmp/check_md5.sh ] && rm -f /tmp/check_md5.sh cat >/tmp/check_md5.sh << EOF #!/bin/bash dir=/data/web n=\`wc -l /tmp/md5.list|awk '{print \$1}'\` for i in \`seq 1 \$n\` do file_name=\`sed -n "\$i"p /tmp/md5.list |awk '{print \$1}'\` md5=\`sed -n "\$i"p /tmp/md5.list|awk '{print \$2}'\` if [ -f \$file_name ] then md5_b=\`md5sum \$file_name\` if [\$md5_b != \$md5 ] then echo "\$file_name changed." fi else echo "\$file_name lose." fi done EOF scp /tmp/check_md5.sh B:/tmp/ ssh B "/bin/bash /tmp/check_md5.sh"