有没有人知道如何列出存在于一个远程文件夹而不是另一个远程文件夹中的文件。我有两个服务器(比如Server1和Server2),它们具有相似的文件夹结构,我在做Rsync。但是,目标文件夹包含的文件多于源文件,因为某些文件已被删除。现在,我正在尝试通过在服务器1和服务器2之间使用diff
来找到在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的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
希望有任何帮助来解决这个问题。感谢。
答案 0 :(得分:5)
尝试此命令:
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中的差异。最后,{{ 1}}仅打印出第二列(从输出中删除awk
列)。
注意:您需要先安装>
。使用sshpass
按如下方式安装它:
apt-get
您可以通过管道其他命令(例如sudo apt-get install sshpass
)来扩展此功能。希望这对你有用。