shell - 获取远程主机上 tar 存档中文件的校验和

标签 shell unix ssh tar md5sum

由于以下原因,我在不使用文件系统的情况下成功获取了存档中文件的 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

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

提前致谢,

最佳答案

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

关于shell - 获取远程主机上 tar 存档中文件的校验和,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16423484/

相关文章:

ruby - du怎么逃*?

python - 如何在 Linux 下 ssh.invoke_shell() 工作

sql-server - 通过 SSH 隧道访问 SQL Server

linux - 根据其他列的值创建一个新列

linux - 获取从 find 命令到变量的路径

c++ - Nodejs 和 UNIX 新手 : run node command in a cpp program

python - 在 python 中使用 paramiko 库通过 SOCKS 进行动态应用程序级端口转发

shell脚本中的Mysql Dump,自动从settings.php读取DB变量

shell - 在 shell 中打印多行 - 提高配置 Vagrantfile 时的可读性

java - 无法从 java 运行 shell 脚本