2012-01-18 46 views
2

我的目标:如何在通过ssh连接到另一台服务器后通过shell脚本下载文件?

具有一个cronjob(MacOSX上雪豹)连接到Debian系统中使用ssh(公钥/私钥登录)一个shell脚本,执行tar命令,并下载打包的文件之后。

我的问题:

登录作品,一些命令也执行。但是,如何将文件下载回本地机器?

这是我到目前为止有:

这是迄今为止shell脚本的内容:

#!/bin/bash 
ssh [email protected] << 'ENDSSH' 
tar -C/-czf /home/user/stuff.tar.gz /home/user/stuff 
ENDSSH 
+0

为什么不简单地scp呢? – 2012-01-18 10:45:08

+1

@МихаилСтрашун:因为它还不存在。 – 2012-01-18 10:45:56

+0

我无法立即测试,但尝试:“scp user @ debian_machine:/ path_to_tar/path/to/local/folder” – hovanessyan 2012-01-18 10:46:02

回答

2

短期和简单,无定界符需要。

ssh -Te none [email protected] "tar -C/-cz /home/user/stuff" >stuff.tar.gz 
+0

漂亮!非常感谢。我会将此标记为已接受的答案,因为它还包含一些改进阅读的脚本;-) – acme 2012-01-18 14:02:40

1

流回来。

#!/bin/bash 
ssh [email protected] << 'ENDSSH' > stuff.tar.gz 
tar -C/-czf - /home/user/stuff 
ENDSSH 
+0

非常好的主意,谢谢! – acme 2012-01-18 13:59:39

+0

我会给予约根森公认的答案,因为他提出了一个很好的改进提示,我现在使用,虽然你的答案是第一个提出漂亮的流式思想的答案。希望你不介意。一个耻辱,不能有两个答案被标记为接受;-) – acme 2012-01-18 14:04:55

1

这可能是你想要的。

scp stuff.tar.gz [email protected]:/"directory to place this file"/

+0

谢谢,我已经想过这样的事情,但使用标准输出没有额外的连接的解决方案是更优雅一点。 – acme 2012-01-18 14:05:56

1

只需rsync一旦文件的创建:

#!/bin/bash 
ssh [email protected] tar -C/-czf /home/user/stuff.tar.gz /home/user/stuff 
rsync -chavP --stats [email protected]:/home/user/stuff.tar.gz . 

发起remotehost第二个连接,但会为您节省复制在网络上的数据时,该文件并没有改变(多)自从上次被归档以来。

1

为什么下载tar文件,而不是建立在标准输出上焦油含量?

即:

ssh [email protected] '(' cd /the/dir '&&' tar cf - list of files ')' >archive.tar 
0

I.如何通过SSH

对于不同压缩格式压缩文件或文件夹,您需要使用不同的命令行:

  1. 邮编

要将文件或文件夹压缩到一个zip文件:

zip -r file.zip file 
  • BZ2
  • 到一个文件(ONLY)压缩到BZ2文件:

    Bzip2 -zk file 
    
  • GZ
  • 压缩的文件(仅)至GZ的文件:

    gzip -c file > file.gz 
    

    顺便说一句,你需要将上面的“文件”更改为文件名的扩展名为要压缩,同时可以与任何关键字替换下面的“XXX”(如果有的话):

  • 焦油
  • 要压缩一个文件或文件夹到一个tar文件:

    tar -cvf xxx.tar file 
    

    要压缩多个文件和/或文件夹到一个tar文件:

    tar -cvf xxx.tar file1 file2 folder1 folder2 ... 
    
  • TAR.BZ2
  • 要将一个文件或文件夹压缩到TAR.BZ2文件:

    tar -cvjf xxx.tar.bz2 file 
    

    要压缩多个文件和/或文件夹的文件TAR.BZ2:

    tar -cvjf xxx.tar.bz2 file1 file2 folder1 folder2 ... 
    
  • .tar.gz的
  • 要压缩一个文件或文件夹的tar.gz文件:

    tar -cvzf xxx.tar.gz file 
    

    要压缩多个文件和/或文件夹的tar.gz文件:

    tar -cvzf xxx.tar.gz file1 file2 folder1 folder2 ... 
    

    II。如何通过SSH提取文件

    要提取的文件会更容易,因为你不必担心文件夹:

    1. 邮编

    要提取zip文件:

    unzip file.zip 
    
  • BZ2
  • 要提取BZ2文件:

    bunzip2 file.bz2 
    
  • GZ
  • 要提取的gz文件:

    gzip -d file.gz 
    
  • 对焦
  • 提取tar文件:

    tar -xvf file.tar 
    
  • TAR.BZ2
  • 要提取TAR.BZ2文件:

    tar -xvjf file.tar.bz2 
    
  • .tar.gz的
  • 要提取tar.gz文件:

    tar -xvzf file.tar.gz 
    

    顺便说一下,您需要用真实文件名替换压缩文件的上述“文件”。

    加成:

    此外远程服务器,上述命令行,也可用于一个Mac OS计算机与终端应用程序。

    相关问题