有谁知道如何列出存在于一个远程文件夹而不是另一个远程文件夹中的文件.我有两个服务器(比如Server1和Server2),它们具有相似的文件夹结构,我在做Rsync.但是,目标文件夹包含的文件多于源文件,因为某些文件已被删除.现在,我正在尝试通过diff在服务器1和服务器2之间使用来查找在Server2中找到哪些新文件的方法.
我可以使用以下命令直接在两个本地文件夹之间进行差异:
diff /home/www/images/test_images /var/www/site/images/test_images
Run Code Online (Sandbox Code Playgroud)
但我想知道是否可以使用ssh在两个远程服务器之间区分文件夹.像这样?
diff ubuntu1@images.server1.com:/home/www/images/test_images ubuntu2@images.server2.com:/var/www/site/images/test_images
Run Code Online (Sandbox Code Playgroud)
说服务器1和服务器2的ssh配置如下:
服务器1
IP: images.server1.com
User: ubuntu1
Password: pa$$word1
Images Path: /home/www/images/test_images
Run Code Online (Sandbox Code Playgroud)
服务器2
IP: images.server2.com
User: ubuntu2
Password: pa$$word2
Images Path: /var/www/site/images/test_images
Run Code Online (Sandbox Code Playgroud)
希望有任何帮助来解决这个问题.谢谢.
试试这个命令:
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}'
Run Code Online (Sandbox Code Playgroud)
说明:
您可以使用diff -B <() <()两个流之间的差异.该命令首先用于sshpassssh到两个服务器,而无需以交互方式输入密码.
对于每个参数diff -B用途find命令递归列出指定目录下的所有图片,并使用sed删除文件的根路径(因为它们是不同的两个服务器-并使它成为工作的diff命令); 以及sort对它们进行排序的命令.
由于diff命令的输出返回>或者<,grep用于仅过滤掉服务器2中的差异.最后,awk仅打印出第二列(>从输出中删除列).
注意:您需要先安装sshpass.使用apt-get如下安装它:
sudo apt-get install sshpass
Run Code Online (Sandbox Code Playgroud)
您可以通过管道其他命令来扩展它rm.希望这对你有用.
| 归档时间: |
|
| 查看次数: |
5165 次 |
| 最近记录: |