linux 如何在ssh上区分目录

xqk2d5yq  于 2023-01-04  发布在  Linux
关注(0)|答案(7)|浏览(178)

我尝试递归比较本地主机上的目录和远程Linux机器上的目录,但是,当我执行下一个命令时:

diff -r 'ssh admin@10.0.0.10:/home/admin' /home/admin

它不工作说:
diff: ssh admin@10.0.0.10:/home/admin: No such file or directory
递归比较目录内容的正确方法是什么?
先谢了

e4eetjau

e4eetjau1#

如果你不需要比较文件中的细节,只需得到目录/文件名的差异,然后尝试以下操作:
(Note:需要设置"无密码SSH登录",有关详细信息,请查看此URL:http://www.linuxproblem.org/art_9.html

diff <(ssh admin@10.0.0.10 ls -R /home/admin) <(ls -R /home/admin)
lyfkaqu1

lyfkaqu12#

尝试使用带有“-n”选项的“rsync”,它只是进行一次“预演”,并告诉您它将执行什么操作。

qltillow

qltillow3#

您可以通过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中继删除了一层。

hlswsv35

hlswsv354#

基于@MarkSetchell的回答和下面的讨论:
如果你想用rsync来做diff,这里有一个例子:

rsync --itemize-changes --dry-run --delete --links -r -c downloads/ user@192.168.1.2:/home/user/downloads/
sqxo8psd

sqxo8psd5#

对于以下所有示例,空文件夹无关紧要。
如果ssh不需要密码,而您希望查看这些文件

diff -y -W250 \
  <(ssh user@host1 "find /jbossas/modules -type f | xargs -I{} md5sum {} | sort -k2")
  <(ssh user@host2 "find /jbossas/modules -type f | xargs -I{} md5sum {} | sort -k2")

如果ssh不需要密码,而您只想知道文件夹是否相同

diff -y -W250 \
  <(ssh user@host1 "find /jbossas/modules -type f | xargs -I{} md5sum {} | sort | md5sum") \
  <(ssh user@host2 "find /jbossas/modules -type f | xargs -I{} md5sum {} | sort | md5sum")

如果ssh需要密码

  • 安装sshpass软件包
  • 在PASS变量中安全接收您的密码(密码将在60秒内清除):echo -n "Password: "; IFS= read -rs PASS < /dev/tty; trap 'unset PASS; echo "PASS has been cleared"; trap - USR1' USR1; { sleep 60; kill -USR1 $$; } &

所以...

diff -y -W250 \
  <(sshpass -p "$PASS" ssh user@host1 "find /jbossas/modules -type f | xargs -I{} md5sum {} | sort | md5sum") \
  <(sshpass -p "$PASS" ssh user@host2 "find /jbossas/modules -type f | xargs -I{} md5sum {} | sort | md5sum")

如果远程主机上需要sudo

diff -y -W250 \
  <(ssh user@host1 "echo \"$PASS\" | sudo -S find /jbossas/modules -type f | xargs -I{} md5sum {} | sort | md5sum") \
  <(ssh user@host1 "echo \"$PASS\" | sudo -S find /jbossas/modules -type f | xargs -I{} md5sum {} | sort | md5sum")

你可以合并选项。
我推荐icdiff而不是diff,但是diff已经足够了。

fxnxkyjh

fxnxkyjh6#

我在命令末尾使用| less来提示交互式密码,使用sdiff是因为它比diff更容易阅读:
因此,在本地和远程之间,键入:

sdiff -s <(find $dir -printf "%p\t%s\n" | sort) <(ssh server1 find $dir -printf '"%p\t%s\n"' | sort) | less

以及两台服务器之间的连接,请键入:

sdiff -s <(ssh server1 find $dir -printf '"%p\t%s\n"' | sort) <(ssh server2 find $dir -printf '"%p\t%s\n"' | sort) | less

其中$dir是要比较的完整目录路径。

irlmq6kh

irlmq6kh7#

如果你需要一个图形用户界面,我发现krusader对这样的任务非常有用。更多细节请参见https://www.linux.com/news/synchronize-directories-komparator-and-kdiff3
example folder compare

相关问题