如何同时进行 gzip 和 scp

如何同时进行 gzip 和 scp

我有一个文件,我想将其压缩并同时使用 scp 传输到另一台主机。

我尝试执行以下命令但失败了。我不介意稍后压缩并 scp 过去,但我只是想知道我哪里做错了

我在这里使用管道 | 错了吗?

-bash-3.2$ gzip -c aum.dmp | scp [email protected]:/export/home/oracle/aum.dmp.gz
Usage: scp [-pqrvBC46] [-F config] [-S program] [-P port]
           [-c cipher] [-i identity] [-o option]
       [[user@]host1:]file1 [...] [[user@]host2:]file2

问候,Noob

答案1

gzip 将写入 STDOUT,而 scp 无法处理它。

尝试

gzip -c aum.dmp | ssh -l  oracle 192.168.0.191 'cat > /export/home/oracle/aum.dmp.gz'

反而。

在哪里

  • gzip -c aum.dmp |将 gzip aum.dmp 压缩,并将结果发送到 stdout
  • ssh -l oracle 192.168.0.191将连接到 192.168.0.191 上的用户 oracle
  • 'cat > /export/home/oracle/aum.dmp.gz'将执行此命令

'cat > /export/home/oracle/aum.dmp.gz'

  • cat将捕获 stdin (来自 | 之前的命令的 stdout)
  • > /export/home/oracle/aum.dmp.gz将写入此 /export/home/oracle/aum.dmp.gz

在远程站点执行的 cat 部分的整个目的是捕获 gzip 结果。

答案2

您可以使用-C标志来启用C传输过程中压缩scp。这应该足够了,尽管你可以检查man scp有关压缩的更多详细信息。

答案3

如果你需要将远程服务器的文件/目录导入到本地存档中,则可以使用tar + gzip在 ssh 中,重定向到本地文件。例如:

ssh user@server "sudo tar cvzf - /var/log/containers/**/*.log" > containers_logs.tgz

在哪里:

  • c—创建档案文件。
  • v——显示进度。
  • z——使用 gzip 压缩。
  • f——档案的文件名。

相关内容