优雅地在远程端发送本地tarball和untar

时间:2015-03-31 19:17:18

标签: linux ssh rsync tar scp

所有

这可能是常见问题解答,但我找不到我的搜索功能。也就是说,我有点想做“反向”焦油管。通常是tar管道,用于将本地文件夹作为tar球发送到远程位置,只需一个很好的命令:

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

(我希望我做对了。我是从记忆中输入的。)

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

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

我想这样做是因为“本地”磁盘具有inode压力,因此保留单个较大的文件比许多较小的文件更好。但是远程系统是具有可忽略的inode压力的系统,并且最好将其保持为扩展目录。

现在,我可以想到使用&&&command-chaining等来实现这一目标的各种方法,但我认为必须有一种方法可以使用tar-pipes和rsync或ssh / scp来实现这一点。只是没有看到。

1 个答案:

答案 0 :(得分:3)

你大部分时间都在那里:

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

-f-告诉tar从 stdin 中提取,-C标志在解开之前更改目录。