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执行命令时存活。我不想每次在我的项目中进行更改时都手动执行此操作。
如果您有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 的写入和读取是通过stdout和stdin(-文件名)进行的。如果您使用的是 GNU tar,则可以-C在处理之前使用来设置正确的目录,而在这里我们使用的是老式(传统?)cd。添加v标志(在接收端)以查看发生了什么,即tar xzvf ....