【问题标题】:why does this tar command fail when passed as string in ssh call?为什么这个 tar 命令在 ssh 调用中作为字符串传递时会失败?
【发布时间】:2015-06-25 21:23:36
【问题描述】:
ssh user@server "sudo tar -czf - -C /path/To/Directory *.properties" | tar xzf -

它失败并出现以下错误 -

tar: *.properties: 无法统计:没有这样的文件或目录

tar:由于先前的错误而以失败状态退出

如果我 ssh 到服务器然后在服务器上,而不是 tar -czf - 使用 tar -czf abc.tgz 并在最后删除管道命令,它可以正常工作,即压缩目录中的所有 .properties 文件?

我尝试过使用 --wildcards 参数以及 -P 和以 *.properties 结尾的完整路径,但它们也不起作用。

【问题讨论】:

  • 我还应该补充一点 - 当有 .而不是 *.properties,该命令可以正常工作。

标签: bash ssh tar sudo


【解决方案1】:

远端的shell 在执行tar 之前扩展user 的主目录中的*.properties。我猜~user 中没有匹配的文件。

您可能想要的更像是(假设user 可以访问该目录)

ssh user@server 'cd /path/To/Directory && sudo tar -czf - *.properties' \
    | tar xzf -

或者,使用tar--wildcards 选项,并停止远程shell 扩展参数:

ssh user@server 'sudo tar -czf - -C /path/To/Directory --wildcards \*.properties'

【讨论】:

  • 但是 -C 标志应该改变目录,不是吗?另外,我不能 cd 到目录,因为我需要拥有 root 权限,并且 sudo cd path/to/directory 不起作用
  • 我找到了解决问题的方法 -- ssh user@server "sudo sh -c 'cd /path/To/Directory; tar -czf - *.properties'" |焦油 xzf -
  • 接受答案作为原始命令确实是在查看主目录,尽管我相信它不应该有 -C 标志。
  • 是扩展通配符的shell; tar 的 -C 标志没有进入它。
  • 你提到了tar --wildcards - 这应该可以工作,如果你阻止远程shell尝试扩展它:ssh u@s 'sudo tar -czf - -C /path/To/Directory --wildcards "*.properties"'
猜你喜欢
  • 2021-09-13
  • 2018-02-13
  • 2016-03-14
  • 1970-01-01
  • 2011-08-02
  • 1970-01-01
  • 2011-09-15
  • 1970-01-01
  • 2015-07-19
相关资源
最近更新 更多