gzip 压缩本地文件夹并将其解压缩到远程服务器

Mr_*_*een 3 osx ssh terminal gzip file-copy

我是这些命令的新手。我正在尝试 gzip 本地文件夹并在远程服务器上解压缩相同的文件夹。问题是,gzipping 和 unzip 必须即时进行。我尝试了很多,我认为最接近的一个是这样的:

tar cf dist.tar ~/Documents/projects/myproject/dist/ | ssh root@13.21.13.12:~/public_html/ "tar zx ~/Documents/projects/myproject/dist.tar"
Run Code Online (Sandbox Code Playgroud)

正如您在上面看到的,我正在尝试将 dist 文件夹发送到远程服务器,但在此之前,我正在尝试动态压缩该文件夹(看起来上面的命令中没有发生这种情况)。

  • 本地文件夹: ~/Documents/projects/myproject/dist/
  • 远程文件夹:~/public_html直接部署到现场

当然,gzip 创建的文件不能在那里,它应该即时发生。

我的目的是通过像sh file.command. 换句话说,我正在尝试部署dist文件夹中的已编译项目,以在sh执行命令时存活。我不想每次在我的项目中进行更改时都手动执行此操作。

roa*_*ima 7

如果您有rsync然后使用它,因为它利用现有文件来允许它只传输差异(即不同的文件部分):

rsync -az ~/Documents/projects/myproject/dist/ root@13.21.13.12:public_html/
Run Code Online (Sandbox Code Playgroud)

--delete每次都添加标志以完全覆盖目标目录树。如果你想看看发生了什么,添加-v.

如果您没有rsync,那么使用这种效率较低的解决方案tar就足够了:

( cd ~/Documents/projects/myproject/dist && tar czf - . ) |
    ssh root@13.21.13.12 'cd public_html && tar xzf -'
Run Code Online (Sandbox Code Playgroud)

请注意,压缩 tarball 的写入和读取是通过stdoutstdin-文件名)进行的。如果您使用的是 GNU tar,则可以-C在处理之前使用来设置正确的目录,而在这里我们使用的是老式(传统?)cd。添加v标志(在接收端)以查看发生了什么,即tar xzvf ....