我尝试使用 SSH 将存档下载到远程计算机,并在远程客户端上提取存档,因为它具有更好的性能。
我有一个非常简单的脚本,它可以下载存档,然后tar xjOf
通过远程客户端上的 ssh 来提取文件。我现在想将 tar 命令的输出通过管道传输到可以将提取的文件保存在本地客户端上的某个进程。我认为 tar 应该具有这种能力,但我无法找到任何解决方案。
#!/bin/bash
ssh $1@$2 'wget https://url.to.my/archive.tar.bz2' #Save the archive to the remote client
ssh $1@$2 'tar archive.tar.bz2 -xjOf' | ??? #What local tool can be used to take the output and save the files from it?
我对 Linux 和 shell 脚本相当陌生,因此代码可能有很多改进方法,但现在我只想知道如何将这些文件保存到我的本地客户端。
谢谢您的帮助
您需要 tar 在本地运行;tar -O 基本上
cat
只是文件内容,因此不适合从中重新创建文件。您可以远程运行 bunzip2 以利用快速的远程 cpu - 请记住,所有数据现在在被发送回本地计算机时都已解压缩,因此如果带宽成为限制因素。尝试两种方式,看看!无论如何,在wget之后..使用以下命令解压缩存档
tar
:-x=extract、-j=decompress-with-bz2 和 -f=filename。你会这样写这有点冒险,因为
wget
可能会将您的文件保存为另一个名称,例如archive.tar.bz2.1' if a file with the same name already exists. Use
wget -O fixedname.tar.bz2 ...` 以获得确定性输出。请注意,“tar”是一种流格式(与 zip 不同),它允许您不存储存档并即时解压缩 - 使用更少的磁盘空间和 IO 操作:
请注意,我删除了“-f”,因为没有文件名,数据从“管道”之前的 wget 流出。有些东西仍会通过 stderr 打印在您的终端上,
wget -qO-
如果您愿意,请尝试更安静的操作。请注意,如果发生错误,它们仍将被打印,但前提是它们发生了。这就是 Unix 的口头禅:如果一切顺利,就别提了。如果你想在远程机器上下载并解压存档,但在本地机器上解压文件,你可以这样做:
这里发生的是这样的:
这里有几点需要注意:
额外:
在我之前的回答中,我没有完全理解这个问题。我把它留在这里,供那些想要从本地机器下载并提取远程机器上的档案的人使用,最有效的方法是:
在上面的示例中,文件被提取到远程计算机上的主目录中,其目录结构与它们在 tar 中的目录结构相同。您可以将其更改为远程上的现有文件夹,例如: