有谁知道如何列出存在于一个远程文件夹而不在另一个远程文件夹中的文件。 我有两台服务器(说Server1和Server2)与我在做Rsync类似的文件夹结构。 但是,由于某些文件被删除,目标文件夹的文件比源文件多。 现在我试图通过使用Server 1和Server 2之间的diff
来find在Server2中查找哪些文件是新的方法。
我可以使用以下命令直接在两个本地文件夹之间进行比较:
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
假设服务器1和服务器2的sshconfiguration如下:
服务器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
希望有任何帮助来解决这个问题。 谢谢。
试试这个命令:
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 <() <()
来获取两个流之间的差异。 该命令首先使用sshpass
将ssh传入两台服务器,而不必交互输入密码。
diff -B
每个参数都使用find
命令递归列出指定目录中的所有图像,并使用sed
删除文件的根路径(因为它们对于两台服务器是不同的 – 并使其适用于diff
命令)。 和sort
命令来排序它们。
由于diff
命令的输出返回>
或<
,所以grep
用来过滤掉服务器2中的差异。最后, awk
只输出第二列(从输出中删除>
列)。
注:您需要先安装sshpass
。 使用apt-get
来安装它,如下所示:
sudo apt-get install sshpass
您可以通过管道其他命令如rm
来扩展。 希望这对你有用。