如何使用 bsdtar 在服务器之间复制文件?

如何使用 bsdtar 在服务器之间复制文件?

我正在寻找使用 bsdtar 在 2 个 Linux 服务器之间复制文件的最快方法。

对于普通的 tar,我会做类似的事情:

ssh root@remote 'tar -cz -C /my/path/ big_file.txt' | tar -zxv

然而,仅仅将“tar”替换为“bsdtar”似乎不起作用。

所以,我的问题是:

  1. 我该如何使用 bsdtar 做到这一点?
  2. 我不想使用 gzip,而是想使用可以使用多个内核进行压缩/解压缩的东西,例如 pbzip2。我该如何将其输入?
  3. 我希望文件“big_file.txt”在目标服务器上被称为“hello_world.txt”,而不使用重命名的临时文件。如何?

更新1:

我自己解决了第一个问题:

ssh root@localhost 'bsdtar -cz -f - -C /my/path/ big_file.txt' | tar -zxv

更新2:

我自己解决了第三个问题:

ssh root@localhost 'bsdtar -cz -f - -C /my/path/ big_file.txt' | tar -zxv -O > test.txt

答案1

该命令的语法有许多变化tar。 GNU tar 默认在标准输入上读取存档并将存档写入标准输出,但许多其他版本默认使用磁带设备。传递f标志(带或不带破折号——我认为 BSD 版本都支持)和参数-来指示 stdin 或 stdout。

如果您想使用不同的(解)压缩程序,请不要告诉tar压缩,并显式地通过管道输入(解)压缩程序。

要重命名文件,请使用-s选项(如果您的版本tar支持)(它类似于GNU tar 的-s选项pax和 选项)。--transform

ssh root@remote 'cd /my/path && bsdtar cf - -s '/big_file\.txt$/hello.txt/' big_file.txt | pbzip2' | pbzip2 -d | tar xf -

如果您只复制单个文件,则使用 tar 没有任何意义,除非您既想保留元数据又想使用自定义压缩程序。

scp -C -p root@remote:/my/path/hello.txt big_file.txt

相关内容