为什么这个 tar 命令在 ssh 调用中作为字符串传递时会失败?

why does this tar command fail when passed as string in ssh call?

ssh user@server "sudo tar -czf - -C /path/To/Directory *.properties" | tar xzf -

失败并出现以下错误 -

tar: *.properties: Cannot stat: No such file or directory

tar: Exiting with failure status due to previous errors

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

我试过使用 --wildcards 参数以及 -P 和以 *.properties 结尾的完整路径,但它们都没有用。

远端的 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'