如何通过ssh区分目录

Hes*_*sin 47 linux shell

我试图递归地将本地主机中的目录与远程linux机器中的目录进行比较.但是,当我执行下一个命令时:

diff -r 'ssh admin@10.0.0.10:/home/admin' /home/admin
Run Code Online (Sandbox Code Playgroud)

它不起作用:

diff:ssh admin@10.0.0.10:/ home/admin:没有这样的文件或目录

以递归方式比较目录内容的正确方法是什么?

提前致谢

BMW*_*BMW 43

如果您不需要在文件中区分细节,只需获取目录/文件名的不同,然后尝试:

(注意:需要设置"无密码的SSH登录",详情请查看以下网址:http: //www.linuxproblem.org/art_9.html)

diff <(ssh admin@10.0.0.10 ls -R /home/admin) <(ls -R /home/admin)
Run Code Online (Sandbox Code Playgroud)

  • 当ssh要求输入密码时,它会自动应答,因为第二个操作符<将其输出隧道输出为密码,如下所示:diff <(ssh admin@192.168.16.139 find/home/admin -printf'"%8s%p \n" ')<(查找/ home/admin -printf'%8s%p \n')此系统仅供授权使用.admin@10.0.0.1的密码:权限被拒绝,请再试一次.admin@10.0.0.1的密码:权限被拒绝,请再试一次.admin@10.0.0.1的密码:权限被拒绝(公钥,密码). (3认同)

Mar*_*ell 26

尝试将"rsync"与"-n"选项一起使用,这只是"干运行"并告诉你它会做什么.

  • `-c`将告诉rsync查看校验和,而不仅仅是日期和长度 (10认同)
  • `--delete`是必要的.没有它,您将看不到第二台机器上存在的任何文件,但在第一台机器上没有.确保你有干运行`-n`选项. (6认同)
  • 当然你的递归也需要`-r`或`-a`,不要忘记在目录名后面添加反斜杠(但是没有星号),否则`--delete`不会返回任何删除.所以你的命令是'rsync -e'ssh -p 22'-azvn --delete admin@10.0.0.10:/ home/admin// home/admin /`. (5认同)
  • 另一个方便的选项:`--itemize-changes`(`-i`)将告诉你每个文件[发生了什么变化](http://andreafrancia.blogspot.de/2010/03/as-you-may-know -rsyncs - 删除 - options.html). (4认同)
  • @FlorianBrucker 建议示例:`rsync --itemize-changes --dry-run -r -c downloads/ user@192.168.1.2:/home/user/downloads/` (4认同)

Alf*_*lfe 10

您可以通过安装远程目录sshfs,然后可以使用它diff -r来比较两个目录.

或者,您可以find在两台机器上运行类似的命令来打印文件树(例如文件名,大小和日期),然后比较两者的输出diff.当然,这不会比较文件内容:

diff <(ssh host find /home/admin -printf '"%8s %P\n"') \
     <(find /home/admin -printf '%8s %P\n')
Run Code Online (Sandbox Code Playgroud)

注意ssh调用中printf格式字符串的双引号.ssh继电器移除一层.

  • +1 表示 sshfs 的提示,它允许在 phpStorm 或其他部署工具等 IDE 中使用挂载的目录 (2认同)