我有一个文件,我想将其压缩并同时使用 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 压缩,并将结果发送到 stdoutssh -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——档案的文件名。