我一直在寻找答案,但没有找到任何有用的答案。
有一个 tar 文件位于不同服务器的 CD 上,我需要将其传输到我的服务器并同时解压缩它,而无需中间保存。tar 有多个文件,它们可能是未知的。
我如何从我的服务器或其他服务器执行此操作?
我已经使用 scp、tar 和 ssh 探索过这个问题,并尝试使用 rsync 来解决这个问题。
任何帮助表示感谢
答案1
在目标系统上(将提取文件的位置):
cd /target/dir && ssh user@source_server "cat /path/to/your/file.tar" | tar -xvv
或者
从源服务器(tar 文件所在的位置):
ssh user@target_system "cd /target/dir && tar -xvv" < /path/to/your/file.tar
下面有一些可供尝试的替代方案(在目标系统上),只是为了展示您可能会感兴趣的更奇特的方式。
scp
和 bash 进程替换(如果可用):
scp user@source_server:/path/to/your/file.tar >(cd /target/dir && tar -x)
scp
以及/proc/self
(如果可用):
cd /target/dir && scp user@source_server:/path/to/your/file.tar /proc/self/fd/1 | tar -x
答案2
这假定您的文件是 TAR 档案。它不假定 TAR 档案是压缩的。如果源文件实际上不是标准 TAR 档案,则命令/选项可能会有所不同。
如果源系统上有一个 tar 文件,请尝试以下操作:
cd /source/dir
cat somefile.tar | ssh user@target_host "cd /target/dir; tar xvf -"
注意命令中的正确选项tar
。 x
提取 tar,v
对于详细(可选),f
指定文件(而不是磁带设备)。您需要-
在末尾,因为这将 tar STDIN 作为 tar 命令的输入。tar 命令需要在 SSH 命令的引号内进行,因此 tar 发生在目标主机上而不是本地主机上。
从目标服务器,稍微改变语法:
cd /target/dir
ssh user@source_host "cat /source/dir/somefile.tar" | tar xvf -