由于以下原因,我成功获取了存档中的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
拜托,有人可以告诉我如何继续吗?
提前致谢,
答案 0 :(得分:2)
您需要将要作为一个字符串远程执行的命令传递给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
执行可能更容易。
答案 1 :(得分:1)
最简单,最快速的解决方案:
ssh 192.9.202.44 "tar --to-command=md5sum -xvjf /home/adup/mybackup.tar.bz2 | paste - -"
这应该产生如下输出:
plik_1 21576a19c7e336a86b6f37578a1b9f4d -
plik_2 90811da0150573efaba9c9d6aa1c4ea2 -
此致
答案 2 :(得分: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