RError.com

RError.com Logo RError.com Logo

RError.com Navigation

  • 主页

Mobile menu

Close
  • 主页
  • 系统&网络
    • 热门问题
    • 最新问题
    • 标签
  • Ubuntu
    • 热门问题
    • 最新问题
    • 标签
  • 帮助
主页 / 问题 / 595363
Accepted
Vyacheslav Danshin
Vyacheslav Danshin
Asked:2020-11-24 20:22:30 +0000 UTC2020-11-24 20:22:30 +0000 UTC 2020-11-24 20:22:30 +0000 UTC

是否可以向远程主机上的 rsync 服务器询问目录的哈希和

  • 772

有一组удаленных主机,其中rsync-сервер. 它接受带有文件的文件夹并将其放入特定目录。

这些文件和文件夹从服务器发送到nodejs客户rsync端。

问题:是否可以从 nodejs 服务器端向远程主机上的 rsync 服务器询问特定目录的哈希和?

目的实现业务版本监控以及系统解决方案所必需的,本质上是一个反馈更新系统。只是信息系统已经实现了将需要的文件传输到公司远程服务器使用rsync.

hash sum需要和更新系统服务的数据库中记录的hash sum进行比较,以此来判断某个1s报告的版本是否正确,比如在一个分支中。

更新:如果被问到,你能建议另一个可以处理类似任务的实用程序吗?(总有一个选项可以自己写,但我想把好的留到以后再写)

upd:如果你尝试将文件发送到远程 rsync 服务器,如果它有一个,它不会返回类似“我已经拥有它,不需要传输它”的反馈作为反馈吗?事实上,这将是解决问题的方法,因为 rsync 很可能通过哈希和进行比较,在这种情况下,可以理解一切正常,如果没有,那么我们首先了解它,然后其次,立即传输正确的文件。

在此处输入图像描述

目前 nodejs 服务器使用rsync 包发送文件,它看起来像这样:

var Rsync = require('rsync');

// Build the command 
var rsync = new Rsync()
  .shell('ssh')
  .flags('az')
  .source('/path/to/source')
  .destination('server:/path/to/destination');

// Execute the command 
rsync.execute(function(error, code, cmd) {
    // we're done 
});
node.js
  • 3 3 个回答
  • 10 Views

3 个回答

  • Voted
  1. spectre_it
    2020-11-26T23:25:24Z2020-11-26T23:25:24Z

    是否可以从 nodejs 服务器端的远程主机上的 rsync 服务器询问特定目录的哈希值?

    不,那是不可能的。你只能自己做哈希。

    第一个选项:哈希文件

    安装

    npm install hash-files
    

    用法

    var hashFiles = require('hash-files');
    
    // options is optional 
    hashFiles(options, function(error, hash) {
        // hash will be a string if no error occurred 
    });
    

    或者在命令行上:

    $ ./bin/hash-files -f '["package.json"]' -a sha256
    a29089cc5e3f8bf6ae15ea6b9cd5eaefb14bbb12e3baa2c56ee5c21422250c75
    

    第二种选择:nodejs本身

    crypto.createHash(算法)

    const filename = process.argv[2];
    const crypto = require('crypto');
    const fs = require('fs');
    
    const hash = crypto.createHash('sha256');
    
    const input = fs.createReadStream(filename);
    input.on('readable', () => {
      var data = input.read();
      if (data)
        hash.update(data);
      else {
        console.log(`${hash.digest('hex')} ${filename}`);
      }
    });
    
    • 1
  2. aleksandr barakin
    2020-11-27T19:04:29Z2020-11-27T19:04:29Z

    据我所知,没有rsync服务器/客户端实现支持您需要的功能。他们解决其他问题。

    但是,根据您提供的代码判断,ssh协议用于与服务器通信。因此,您只需运行该程序即可直接在服务器上计算所需文件的校验和

    md5sum /путь/к/файлу1 /путь/к/файлу2 /путь/к/каталогу/*
    

    并解析响应:

    хэш-сумма  /путь/к/файлу1
    хэш-сумма  /путь/к/файлу2
    хэш-сумма  /путь/к/каталогу/файл3
    хэш-сумма  /путь/к/каталогу/файл4
    ...
    

    该程序md5sum用于使用md5算法计算校验和,但gnu/coreutils包中包含许多与其他加密算法一起使用的其他程序。


    ssh客户端的实现node.js不止于此:一、二、三等。

    • 1
  3. Best Answer
    sanmai
    2020-12-02T13:55:57Z2020-12-02T13:55:57Z

    无法询问目录的哈希和,但可以在不执行实际复制操作的情况下询问哪些文件已更改。您只需要指定一个标志dry-run:

    rsync.set('dry-run'); // оно же rsync.dry();
    

    然后,从命令的输出中,获取已更改文件的列表。如果您没有明确禁止这样做,那么比较将完全按照您的意愿进行,即使用校验和。

    通过指定一个选项out-format,您可以仅获取文件列表而没有任何内容,例如,以这种形式:

    out-format="%f"
    
    • 0

相关问题

Sidebar

Stats

  • 问题 10021
  • Answers 30001
  • 最佳答案 8000
  • 用户 6900
  • 常问
  • 回答
  • Marko Smith

    如何停止编写糟糕的代码?

    • 3 个回答
  • Marko Smith

    onCreateView 方法重构

    • 1 个回答
  • Marko Smith

    通用还是非通用

    • 2 个回答
  • Marko Smith

    如何访问 jQuery 中的列

    • 1 个回答
  • Marko Smith

    *.tga 文件的组重命名(3620 个)

    • 1 个回答
  • Marko Smith

    内存分配列表C#

    • 1 个回答
  • Marko Smith

    常规赛适度贪婪

    • 1 个回答
  • Marko Smith

    如何制作自己的自动完成/自动更正?

    • 1 个回答
  • Marko Smith

    选择斐波那契数列

    • 2 个回答
  • Marko Smith

    所有 API 版本中的通用权限代码

    • 2 个回答
  • Martin Hope
    jfs *(星号)和 ** 双星号在 Python 中是什么意思? 2020-11-23 05:07:40 +0000 UTC
  • Martin Hope
    hwak 哪个孩子调用了父母的静态方法?还是不可能完成的任务? 2020-11-18 16:30:55 +0000 UTC
  • Martin Hope
    Qwertiy 并变成3个无穷大 2020-11-06 07:15:57 +0000 UTC
  • Martin Hope
    koks_rs 什么是样板代码? 2020-10-27 15:43:19 +0000 UTC
  • Martin Hope
    user207618 Codegolf——组合选择算法的实现 2020-10-23 18:46:29 +0000 UTC
  • Martin Hope
    Sirop4ik 向 git 提交发布的正确方法是什么? 2020-10-05 00:02:00 +0000 UTC
  • Martin Hope
    Arch ArrayList 与 LinkedList 的区别? 2020-09-20 02:42:49 +0000 UTC
  • Martin Hope
    iluxa1810 哪个更正确使用:if () 或 try-catch? 2020-08-23 18:56:13 +0000 UTC
  • Martin Hope
    faoxis 为什么在这么多示例中函数都称为 foo? 2020-08-15 04:42:49 +0000 UTC
  • Martin Hope
    Pavel Mayorov 如何从事件或回调函数中返回值?或者至少等他们完成。 2020-08-11 16:49:28 +0000 UTC

热门标签

javascript python java php c# c++ html android jquery mysql

Explore

  • 主页
  • 问题
    • 热门问题
    • 最新问题
  • 标签
  • 帮助

Footer

RError.com

关于我们

  • 关于我们
  • 联系我们

Legal Stuff

  • Privacy Policy

帮助

© 2023 RError.com All Rights Reserve   沪ICP备12040472号-5