2

由于以下原因,我在不使用文件系统的情况下成功获得了存档中文件的 md5sum:

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

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

提前致谢,

4

3 回答 3

3

您需要将要远程执行的命令作为一个字符串传递给 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.

于 2013-05-07T15:59:58.233 回答
2

最简单最快的解决方案:

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

这应该产生如下输出:

plik_1 21576a19c7e336a86b6f37578a1b9f4d  -
plik_2 90811da0150573efaba9c9d6aa1c4ea2  -

问候,

于 2016-04-07T10:08:01.417 回答
0

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

本地存档:

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
于 2018-04-06T00:57:36.710 回答