我的目标:
有一个cronjob的shell脚本(MacOSX Snow Leopard),通过ssh(公钥/私钥login)连接到Debian机器,执行一个tar
命令,然后下载tar文件。
我的问题:
login工作,也执行一些命令。 但是我怎样才能把文件下载回本地机器呢?
这是我迄今为止:
这是目前为止的shell脚本的内容:
#!/bin/bash ssh user@remotehost << 'ENDSSH' tar -C / -czf /home/user/stuff.tar.gz /home/user/stuff ENDSSH
简而言之,不需要heredoc。
ssh -Te none user@remotehost "tar -C / -cz /home/user/stuff" >stuff.tar.gz
把它回流。
#!/bin/bash ssh user@remotehost << 'ENDSSH' > stuff.tar.gz tar -C / -czf - /home/user/stuff ENDSSH
这可能是你想要的。
scp stuff.tar.gz user@remotehost:/"directory to place this file"/
只需创建一个rsync
文件即可:
#!/bin/bash ssh user@remotehost tar -C / -czf /home/user/stuff.tar.gz /home/user/stuff rsync -chavP --stats user@remotehost:/home/user/stuff.tar.gz .
这不会启动到remotehost
的第二个连接,但是当文件自上次归档以来没有更改(很多)时,将会保存您在网络上复制数据。
为什么要下载tar文件而不是在stdout上创建tar内容?
即:
ssh user@machine '(' cd /the/dir '&&' tar cf - list of files ')' >archive.tar
I.如何通过SSH压缩文件或文件夹
对于不同的压缩格式,您需要使用不同的命令行:
将文件或文件夹压缩到一个zip文件:
zip -r file.zip file
要将文件(仅)压缩到bz2文件:
Bzip2 -zk file
要将文件(仅)压缩到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 -cvjf xxx.tar.bz2 file
要将多个文件和/或文件夹压缩到tar.bz2文件,请执行以下操作:
tar -cvjf xxx.tar.bz2 file1 file2 folder1 folder2 ...
要将一个文件或文件夹压缩到tar.gz文件:
tar -cvzf xxx.tar.gz file
要将多个文件和/或文件夹压缩到tar.gz文件,请执行以下操作:
tar -cvzf xxx.tar.gz file1 file2 folder1 folder2 ...
II。 如何通过SSH提取文件
提取文件会更容易,因为您不需要担心文件夹:
提取一个zip文件:
unzip file.zip
提取一个bz2文件:
bunzip2 file.bz2
提取一个gz文件:
gzip -d file.gz
提取一个tar文件:
tar -xvf file.tar
提取一个tar.bz2文件:
tar -xvjf file.tar.bz2
提取一个tar.gz文件:
tar -xvzf file.tar.gz
顺便说一句,你需要用真实的文件名替换压缩文件的上述“文件”。
奖金:
除了远程服务器之外,上述命令行也适用于具有终端应用程序的Mac OS计算机。