我在这里找到了几个关于如何实现这个目标的方法,但是我遇到了一个超出我的linux知识的问题。我想将一个本地文件夹与一个远程文件夹进行比较,如果它们与我的nagios服务器不同,那就写一个文件的“alert”,让人们知道这些目录是不同步的。
情况。
我可以区分单个文件:
diff -w /data/telescopedata/40in/shd/2016/test <(ssh astro 'cat /data/40in/shd/2016/test')
0a1
> line 1
它成功地返回差异,因此ssh和数据路径都很好。
我可以像这样列出远程目录:
ssh astro 'ls -l /data/40in/shd/2016'
现在,如果我尝试做同样的事情并比较我得到的目录:
diff -w /data/telescopedata/40in/shd/2016 <(ssh astro ls -l '/data/40in/shd/2016')
结果是:
diff: /data/telescopedata/40in/shd/2016/63: No such file or directory
> / 63让我读到了我认为我理解的命名管道和匿名管道。但是,我不知道如何让我的差异化工作。我可以用rsync做到这一点,但我想知道我是否可以使用diff。
有人能引导我朝着正确的方向前进吗?
答案 0 :(得分:0)
diff -w /data/telescopedata/40in/shd/2016 <(ssh astro ls -l '/data/40in/shd/2016')
这是胡说八道。你不能像这样比较目录。最简单的方法是使用sshfs
在本地挂载远程目录并进行比较:
mkdir /tmp/cmp
sshfs astro:/data/40in/shd/2016 /mnt/cmp
diff -w /data/telescopedata/40in/shd/2016 /mnt/cmp/
fusermount -u /tmp/cmp
它应该做得很好。
答案 1 :(得分:0)
sshfs非常酷,但我没有,所以这是另一种不涉及任何安装等的简单方法:
mkdir /tmp/cmp
scp -pr astro:/data/40in/shd/2016 /tmp/cmp
diff -rw /data/telescopedata/40in/shd/2016 /tmp/cmp/2016
rm -rf /tmp/cmp
在整个网络中复制整个目录树看起来非常苛刻,但是你在任何主机到主机的比较中都是这样做的(除了rsync,但它没有显示实际的差异)。但是仍然存在写入磁盘的开销。如果你有大文本文件,使用scp -C
压缩选项可以加快速度。
顺便说一下,注意差异上的-r。在两个目录上执行普通差异仅比较这些目录的顶级内容,因此即使相应子目录的内容不同,也可以报告它们是相同的。
答案 2 :(得分:0)
rsync -arnv --exclude 'pdf/' --exclude 'libs/' --exclude '*.gz' root@127.129.156.177:$PWD .
rsync -arnv --exclude 'pdf/' --exclude 'libs/' --exclude '*.gz' root@127.129.156.177:${PWD/html/release}/ . | grep -v '/$'