【问题标题】:Diff between two remote folders through SSH通过 SSH 区分两个远程文件夹
【发布时间】:2014-02-18 04:15:21
【问题描述】:

有谁知道如何列出存在于一个远程文件夹中而不是另一个远程文件夹中的文件。我有两台服务器(比如 Server1 和 Server2),它们的文件夹结构相似,我正在执行 Rsync。但是,由于某些文件已被删除,因此目标文件夹的文件多于源文件夹。现在我试图找到一种方法,通过在服务器 1 和服务器 2 之间使用 diff 来查找服务器 2 中哪些文件是新的。

我可以使用以下命令直接获取两个本地文件夹之间的差异:

diff /home/www/images/test_images /var/www/site/images/test_images

但我想知道是否可以使用 ssh 在两个远程服务器之间区分文件夹。像这样?

diff ubuntu1@images.server1.com:/home/www/images/test_images ubuntu2@images.server2.com:/var/www/site/images/test_images

假设Server 1和Server 2的ssh配置如下:

服务器 1

IP: images.server1.com
User: ubuntu1
Password: pa$$word1
Images Path: /home/www/images/test_images

服务器 2

IP: images.server2.com
User: ubuntu2
Password: pa$$word2
Images Path: /var/www/site/images/test_images

希望得到任何帮助来解决这个问题。谢谢。

【问题讨论】:

标签: linux ssh diff


【解决方案1】:

试试这个命令:

diff -B <(sshpass -p 'pa$$word1' ssh ubuntu1@images.server1.com "find /home/www/images/test_images -type f | sed 's/\/home\/www\/images\/test_images\///g'" | sort -n) <(sshpass -p 'pa$$word2' ssh ubuntu2@images.server2.com "find /var/www/site/images/test_images -type f | sed 's/\/var\/www\/site\/images\/test_images\///g'" | sort -n) | grep ">" | awk '{print $2}'

说明:

您可以使用diff -B &lt;() &lt;() 获取两个流之间的差异。该命令首先使用sshpass ssh 进入两台服务器,而无需交互输入密码。

diff -B 的每个参数使用find 命令递归列出指定目录中的所有图像,并使用sed 删除文件的根路径(因为它们对于两台服务器是不同的 - 并使其为diff 命令工作);和sort 命令对它们进行排序。

由于diff 命令的输出返回&gt;&lt;grep 仅用于过滤掉服务器 2 中的差异。最后,awk 仅打印出第二列 (从输出中删除 &gt; 列)。

注意:您需要先安装sshpass。使用apt-get安装如下:

sudo apt-get install sshpass

您可以通过管道传递其他命令(例如 rm)来扩展它。希望这对你有用。

【讨论】:

  • 非常感谢您的解释。你解决了我的问题,我只是添加了一个 nohup 'you command' & disown 在后台运行,因为它需要很多时间,因为我正在测试超过 1,000,000 张图像......太棒了!!!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2010-10-01
  • 1970-01-01
  • 2012-10-27
  • 2011-12-21
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多