如何使用 Powershell 将 curl 命令的结果通过管道传输到 tar?

How to pipe the results of the curl command into tar using Powershell?

我目前正在尝试 运行 在 Windows Powershell 中执行以下命令:

curl https://archive.apache.org/dist/tomcat/tomcat-8/v8.5.65/bin/apache-tomcat-8.5.65.tar.gz | tar xvz --strip-components=1 - -C ~/tomcat-8.6.65

当我 运行 这个命令时,它会尝试解压默认值 \.\tape0 而不是 Tomcat 压缩包。我知道解决方法是使用 -f 指定文件名,但是我不知道当我从 URI 中提取文件时如何实现。有没有人有使这个命令起作用的解决方案?

  • PowerShell 仅通过 text(字符串)与外部程序通信,不支持 原始字节流 ;有关详细信息,请参阅

  • Windows PowerShell 中(但不再在 PowerShell (Core) 7+ 中), curlInvoke-WebRequest cmdlet 的内置别名;要改为调用外部 curl.exe 程序,请使用 curl.exe,即 包括文件扩展名 .

由于您确实需要原始字节流处理,因此无法使用 PowerShell 管道,但您可以委托给 cmd.exe:

# Make sure that the target dir. exists and get its full path.
# (If the target dir. doesn't exist, tar's -C option will fail.)
$targetDir = (New-Item -Force -ErrorAction Stop -Type Directory $HOME/tomcat-8.6.65).FullName

# Invoke cmd.exe's binary pipeline, passing the target dir.
# As an aside: tar.exe on Windows does NOT know that ~ refers to the 
#              user's home dir.
cmd /c @"
curl https://archive.apache.org/dist/tomcat/tomcat-8/v8.5.65/bin/apache-tomcat-8.5.65.tar.gz | tar xvz --strip-components=1 -f - -C "$targetDir"
"@

以上还更正了您的 tar 命令的语法问题:- 应该是 -f -