windows - 如何使用 Powershell 将 curl 命令的结果通过管道传输到 tar?
问题描述
我目前正在尝试在 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 仅通过文本(字符串)与外部程序通信,它不支持原始字节流;有关更多信息,请参阅此答案。
在Windows PowerShell中(但不再在PowerShell (Core) 7+中),是cmdlet
curl
的内置别名;Invoke-WebRequest
要改为调用外部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 -
.
推荐阅读
- http-headers - 是否有托管 RSS 提要文件的标准 URL?
- minikube - Minikube:无法启动 minikube - 由于 DRV_NO_IP 而退出:
- apache-kafka - kafka 如何决定单个消费者组中哪个消费者读取消息?
- python - 覆盖 df.to_json 文件
- events - 消费者重复事件
- flutter - 小部件重新加载时未调用 initState() 方法
- matlab - Simulink 状态空间模块在 MIMO 模型中仅提供一个输出
- django - 在 Django 中反转 - 尝试在 Django 中从更新视图反转到详细视图
- swift - 如何以给定的顺序动画/填充 UIBezierPath?
- json - Swift:将属性添加到编码为 JSON 的结构中