tar over ssh:设置目标文件名和位置,并覆盖现有文件

时间:2016-07-08 21:57:29

标签: bash ssh server tar remote-server

解释这个问题的最简单方法是在bash脚本中显示以下代码行。

tar -cJf - ./my_folder | ssh user@example 'tar -xJf - && rm -r ./path-to-my_folder/my_folder && mv ./my_folder ./path-to-my_folder'

我不完全了解它是如何工作的。 ('-'在这种情况下的含义是什么?)但这就是它的作用:

  • 在内存中创建压缩的tar存档,管道以某种方式通过ssh推送tar数据

  • tar存档显示在user的根文件夹中,已解压缩

  • ssh命令继续执行' ... '之间的内容,使用rm删除服务器端的旧文件夹,并将用户根目录中提取的文件夹移除< / p>

很明显,这是一种相当漫长的做事方式。如果将tar存档提取到正确的位置会更好,这样就不需要rmmv命令。可以这样做吗?

注意:我无法使用 rsync

1 个答案:

答案 0 :(得分:1)

试试这个:

tar -cJf - ./my_folder | ssh user@example 'tar -xJf - -C path-to-my_folder'

-符号表示 STDOUT 。但在现代tar实施中, STDOUT 默认输出,因此-f -可以省略:

tar -cJ my_folder | ssh user@example 'tar -xJC path-to-my_folder'

-J切换意味着xz压缩,对于小配置(如raspberry-pi,android和许多嵌入系统)可能有点过分,因此使用{{1}可以获得更好的性能切换-z压缩:

gzip