【问题标题】:tar over ssh: Set destination file name and location, and overwrite existing [closed]tar over ssh:设置目标文件名和位置,并覆盖现有的[关闭]
【发布时间】:2016-11-11 13:40:46
【问题描述】:

解释这个问题的最简单方法是显示我在 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 存档出现在users 根文件夹中,已解压

  • ssh 命令继续执行' ... ' 之间的内容,使用rm 删除服务器端的旧文件夹,并通过从用户根目录移动提取的文件夹来替换

很明显,这是一条相当长的路。最好将 tar 存档解压缩到正确的位置,这样就不需要 rmmv 命令。这个可以吗?

注意:我不能使用 rsync

【问题讨论】:

  • 所有关于 tar-over-ssh 的问题确实属于 unix.stackexchange.com 或 superuser.com。 SO 是针对编程问题的,而不是关于普通命令行的问题。
  • @Barmar 我同意 - 我不小心发布了一个关于服务器故障的问题,这也是错误的地方。我已将其标记为迁移
  • 我投票结束这个问题,因为它属于 Unix 和 Linux
  • 这没有任何意义。等待迁移

标签: bash ssh server tar remote-server


【解决方案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 和许多嵌入式系统)上可能会过大,因此您可以通过使用-z 开关来获得更好的性能gzip压缩:

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

【讨论】:

  • 太棒了 - 谢谢!它甚至似乎覆盖了旧内容。
猜你喜欢
  • 2012-04-29
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多