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

tar over ssh: Set destination file name and location, and overwrite existing

解释这个问题的最简单方法是显示我在 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 存档被提取到正确的位置会更好,这样就不需要 rmmv 命令了。这能做到吗?

注意:我不能使用rsync

试试这个:

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 和许多嵌入式系统)上可能会过分杀伤力,因此您可以获得更好的性能通过使用 -z 开关进行 gzip 压缩:

tar -zc my_folder | ssh user@example 'tar -zxC path-to-my_folder'