优雅地发送本地 tarball 并在远程端解压

Elegantly send local tarball and untar on remote end

全部,

这可能是一个常见问题解答,但我无法通过搜索找到它。也就是说,我有点想做 "reverse" tar 管道。通常 tar 管道用于将本地文件夹作为 tar 球发送到远程位置,在单个漂亮的命令中:

tar zcvf - ~/MyFolder | ssh user@remote "cat > ~/backup/MyFolder.tar.gz"

(我希望我没记错。我凭记忆输入的。)

我想知道相反的情况。假设我在本地有一个大目录的 tar 球,我想做的是将它(rsync?scp?)复制到远程机器,它将作为扩展文件存在,即:

Local:  sourcecode.tar.gz ==> send to Remote and untar ==>
Remote: sourcecode/

我想这样做是因为 "local" 磁盘有 inode 压力,所以保留一个大文件比多个小文件要好。但是远程系统是一个 inode 压力可以忽略不计的系统,最好将它保留为一个扩展目录。

现在,我可以想出各种方法来使用 &&-命令链接等,但我认为必须有一种方法可以使用 tar-管道和 rsync 或 ssh/scp 我只是没看到。

你已经完成大部分了:

ssh user@remote "tar -C /parent/directory -xz -f-" < sourcecode.tar.gz

其中 -f- 告诉 tar 从 stdin 提取,并且 -C 标志在 untarring 之前更改目录.