【问题标题】:get checksum of files inside tar archive on remote host获取远程主机上 tar 存档中文件的校验和
【发布时间】:2013-05-01 16:02:56
【问题描述】:

感谢:

tar tjf '/home/adup/mybackup.tar.bz2' | sort | grep -v '/$' |
( while read filename;
    do md5=$(tar xjOf '/home/adup/mybackup.tar.bz2' $filename | md5sum | awk '{print $1}'); 
    echo "$md5  $filename";
done)

不幸的是,我需要通过 ssh 在远程主机上执行以下操作:

ssh 192.9.202.44 tar tjf '/home/adup/mybackup.tar.bz2' | sort | grep -v '/$' |(  while read filename; do md5=$(tar xjOf '/home/adup/mybackup.tar.bz2' $filename | md5sum | awk '{print $1}'); echo "$md5  $filename"; done)

但是这样不起作用,其中一个 tar 命令在本地解释并给我这样的错误:

tar (child): /home/adup/mybackup.tar.bz2 : no such file

请问,有人可以告诉我如何进行吗?

提前致谢,

【问题讨论】:

    标签: shell unix ssh tar md5sum


    【解决方案1】:

    您需要将要远程执行的命令作为一个字符串传递给 ssh:

    ssh 192.9.202.44 "tar tjf '/home/adup/mybackup.tar.bz2' | sort | grep -v '/\$' |(  while read filename; do md5=\$(tar xjOf '/home/adup/mybackup.tar.bz2' \$filename | md5sum | awk '{print $1}'); echo "\$md5  \$filename"; done)"
    

    另外,请确保被本地 shell 解释的 $ 等字符被引用。

    脚本越长,在进行所有这些引用时就越容易出错。编写一个“普通”的 shell 脚本会更容易,使用scp 将其复制到远程主机,然后使用ssh 执行。

    【讨论】:

    • 太棒了!我试图成功的几个小时,而你在 5 分钟内就成功了。非常感谢您的改编。我试图引用整个命令而不是转义 $ 字符,这就是诀窍。解决了!
    • 几周前我正在做类似的事情,所以我非常了解所有陷阱 :) 很高兴我能提供帮助。您介意将答案标记为正确吗?谢谢。
    【解决方案2】:

    最简单最快的解决方案:

    ssh 192.9.202.44 "tar --to-command=md5sum -xvjf /home/adup/mybackup.tar.bz2 | paste - -"
    

    这应该产生如下输出:

    plik_1 21576a19c7e336a86b6f37578a1b9f4d  -
    plik_2 90811da0150573efaba9c9d6aa1c4ea2  -
    

    问候,

    【讨论】:

      【解决方案3】:

      由于上一个版本没有删除文件夹,这里的本地和远程存档方法略有不同:

      本地存档:

      tar --to-command=md5sum -xvf 20180405181352.tar |grep -v /$ | paste - - > md5sum_local.txt
      

      远程存档:

      ssh user@host "cat /path/myfile.tar" | tar --to-command md5sum -xvf - | egrep -v /$ | paste - - > md5sum_remote.txt
      

      【讨论】:

        猜你喜欢
        • 2011-10-11
        • 2020-10-01
        • 2017-09-09
        • 2016-08-24
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2020-09-27
        • 1970-01-01
        相关资源
        最近更新 更多