同时 scp 和解压缩文件而不保存

同时 scp 和解压缩文件而不保存

我一直在寻找答案,但没有找到任何有用的答案。

有一个 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 -"

注意命令中的正确选项tarx提取 tar,v对于详细(可选),f指定文件(而不是磁带设备)。您需要-在末尾,因为这将 tar STDIN 作为 tar 命令的输入。tar 命令需要在 SSH 命令的引号内进行,因此 tar 发生在目标主机上而不是本地主机上。

从目标服务器,稍微改变语法:

cd /target/dir
ssh user@source_host "cat /source/dir/somefile.tar" | tar xvf -

相关内容