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 存档,管道以某种方式将 tar 数据推送到 ssh
tar 存档出现在 user
的根文件夹中,已解压
ssh 命令继续执行 ' ... '
之间的内容,使用 rm
删除服务器端的旧文件夹,并通过从用户根目录
很明显,这是一个相当漫长的做事方式。如果 tar 存档被提取到正确的位置会更好,这样就不需要 rm
和 mv
命令了。这能做到吗?
注意:我不能使用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'
解释这个问题的最简单方法是显示我在 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 存档,管道以某种方式将 tar 数据推送到 ssh
tar 存档出现在
user
的根文件夹中,已解压ssh 命令继续执行
' ... '
之间的内容,使用rm
删除服务器端的旧文件夹,并通过从用户根目录
很明显,这是一个相当漫长的做事方式。如果 tar 存档被提取到正确的位置会更好,这样就不需要 rm
和 mv
命令了。这能做到吗?
注意:我不能使用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'