我想递归比较本地主机中的目录到远程Linux机器中的目录。然而,当我执行的下一个命令:如何通过SSH区分目录
diff -r 'ssh [email protected]:/home/admin' /home/admin
这是行不通的说:
DIFF:SSH [email protected]:/首页/管理员:没有这样的文件或目录
什么是递归比较目录内容的正确方法?
在此先感谢
我想递归比较本地主机中的目录到远程Linux机器中的目录。然而,当我执行的下一个命令:如何通过SSH区分目录
diff -r 'ssh [email protected]:/home/admin' /home/admin
这是行不通的说:
DIFF:SSH [email protected]:/首页/管理员:没有这样的文件或目录
什么是递归比较目录内容的正确方法?
在此先感谢
如果不需要中DIFF文件中的细节,只是让DIR /文件名的差异,那么试试这个:
(注:需要设置“SSH登录无密码”,详细介绍,请查看本网址:http://www.linuxproblem.org/art_9.html)
diff <(ssh [email protected] ls -R /home/admin) <(ls -R /home/admin)
,因为第二个运算符<它将输出作为密码进行隧道传输,所以会自动应答: diff <(ssh [email protected] find/home/admin -printf'“%8s%p \ n”')<(find/home/admin -printf'%8s%p \ n') 此系统仅供授权使用。 [email protected]的密码: 权限被拒绝,请重试。 [email protected]的密码: 权限被拒绝,请重试。 [email protected]的密码: 权限被拒绝(公钥,密码)。 –
您需要首先为SSH会话设置非密码 – BMW
我更新了我的答案,请查看此URL http://www.linuxproblem.org/art_9.html – BMW
尝试使用“rsync的”用“-n”选项,它只是做一个“预演”,并告诉你那是什么会做。
'-c'会告诉rsync查看校验和,而不仅仅是日期和长度 – Mike
'--delete'是需要的。没有它,你将不会看到第二台机器上存在的任何文件,但不会在第一台上。确保你有空运行'-n'选项。 – JellicleCat
当然你也需要'-r'或'-a'来递归,并且不要忘记在目录名称后面加上反斜杠(但是没有星号),否则''delete'不会返回任何东西删除。所以你的命令是'rsync -e'ssh -p 22'-azvn --delete [email protected]:/ home/admin// home/admin /'。 – TNT
您可以通过sshfs
挂载远程目录,然后您可以使用diff -r
来比较这两个目录。
或者,您可以在两台机器上运行类似的find
命令来打印文件树(例如文件名,大小和日期),然后使用diff
比较两者的输出。这不是比较文件的内容,当然是:
diff <(ssh host find /home/admin -printf '"%8s %P\n"') \
<(find /home/admin -printf '%8s %P\n')
注意双引号的ssh
调用的printf格式字符串。一层被ssh
中继去除。
我觉得krusader这样的任务的情况下,是非常有用的,你需要一个GUI。 有关更多详细信息,请参阅https://www.linux.com/news/synchronize-directories-komparator-and-kdiff3http://krusador.org。
相关:http://serverfault.com/questions/59140/how-do-diff-over-ssh – fedorqui
这个链接将告诉您如何比较文件。它不能用于比较dirs –