You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

本地machineA与远程machineB指定目录文件校验和对比需求

嘿,我来分享几个靠谱的方法,帮你搞定本地machineA的/primary、/secondary文件夹和远程machineB的/bat/snap/目录之间的文件校验和对比:

方案1:本地生成校验和文件,远程验证匹配度

这个方法适合文件数量较多的场景,只需要传输一个小的校验和文件到远程:

  1. 在machineA上生成本地文件的校验和
    先切换到根目录,遍历两个目标文件夹的所有文件,生成带路径的校验和列表:
    cd /
    find primary secondary -type f -exec md5sum {} \; > local_checksums.txt
    
  2. 调整路径为远程对应路径
    因为远程的文件都在/bat/snap/下,所以要把本地路径替换成远程的路径格式:
    sed 's/^\(primary\|secondary\)/bat\/snap\/\1/' local_checksums.txt > remote_path_checksums.txt
    
  3. 传输校验和文件到machineB
    scp把调整后的文件传到远程服务器的临时目录:
    scp remote_path_checksums.txt your_username@machineB:/tmp/
    
  4. 在远程执行校验
    通过ssh登录远程,切换到根目录后用md5sum -c验证每个文件的校验和:
    ssh your_username@machineB "cd / && md5sum -c /tmp/remote_path_checksums.txt"
    
    执行后会直接显示哪些文件校验不匹配,或者哪些文件在远程不存在。
方案2:远程生成校验和,本地直接对比

如果不想传输文件,可以让远程直接计算对应文件的校验和,拉回本地后对比:

  1. 在machineA上生成本地校验和
    和方案1第一步一样,先生成本地的校验和列表:
    cd /
    find primary secondary -type f -exec md5sum {} \; > local_checksums.txt
    
  2. 远程拉取对应文件的校验和
    通过ssh让远程服务器遍历/bat/snap/primary/bat/snap/secondary的文件,生成校验和后替换回本地路径格式,再保存到本地:
    ssh your_username@machineB "cd / && find bat/snap/primary bat/snap/secondary -type f -exec md5sum {} \; | sed 's/bat\/snap\/\(primary\|secondary\)/\1/'" > remote_checksums.txt
    
  3. 本地对比两个校验和文件
    为了避免文件顺序不同导致的diff误报,先排序再对比:
    sort local_checksums.txt > sorted_local.txt
    sort remote_checksums.txt > sorted_remote.txt
    diff sorted_local.txt sorted_remote.txt
    
    输出的内容就是两边校验和不一致或者存在差异的文件。

额外提示

  • 如果你想使用更安全的哈希算法(比如SHA-256),只需要把所有命令中的md5sum替换成sha256sum即可。
  • 为了操作更顺畅,建议提前配置ssh免密登录(用ssh-keygen生成密钥对,把公钥传到machineB的~/.ssh/authorized_keys里),避免每次输入密码。

内容的提问来源于stack exchange,提问作者flash

火山引擎 最新活动