解释这个问题的最简单方法是在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存档提取到正确的位置会更好,这样就不需要rm
和mv
命令。可以这样做吗?
注意:我无法使用 rsync 。
答案 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