powershell - 在 Windows 上使用 7-zip 通过管道压缩为 tar.xz

标签 powershell pipe 7zip

我的命令行是这样的(powershell):

$7z ="`"c:\Program Files\7-Zip\7z.exe`""
&$7z a -r -ttar -bd -so . | &$7z a -r -txz -bd $archive -si

生成的存档文件确实包含 tar 文件,但该 tar 文件已损坏。

请注意,将管道分成两个命令可以正常工作:

&$7z a -r -ttar -bd ${archive}.tmp .
&$7z a -r -txz -bd $archive ${archive}.tmp

生成的存档完全有效。

那么,我的管道出了什么问题?

(我正在使用 Powershell)

最佳答案

您的管道没有任何问题,而是管道的工作方式导致了错误。

PowerShell 管道以异步方式工作。这意味着即使第一个命令尚未完成执行,第一个命令的输出也可立即用于第二个命令的一个对象,See here.

UnixPowerShell 管道的操作方式相同。您可能会看到 UnixPowerShell 之间存在差异的原因是它们的处理方式不同。

Unix 在命令之间传递字符串。作为 Powershell 管道,将在命令之间传递完整的 .net 对象。命令之间数据类型的这种差异将是它在 unix 上运行而不是在 PowerShell 中运行的原因。如果7z.exe无法正确地聚集这些.net对象,则文件将被损坏,See here

关于powershell - 在 Windows 上使用 7-zip 通过管道压缩为 tar.xz,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29934762/

相关文章:

powershell - 如何使用 powershell 的注释重新启动或关闭远程计算机

python-3.x - Discord.py 在 Windows 10 上安装失败(Python 3.9,包括日志)

javascript - 管道适用于本地主机但不适用于远程nodejs

索引/随机访问 7zip .7z 文件

powershell - 寻找纯 PowerShell IRC 客户端

c-如何在多个管道中同时读写?

c - 在 c 中使用管道和 I\O 重定向的 Shell 实现

.net - 用于在 .net 中提取 7z 文件的 API

c++ - 如何为 7z 存档格式写入二进制数据?

powershell - 如何在PowerShelll中列出匹配目录的内容,无论Get-ChildItem字符串输入是否包含通配符