我的命令行是这样的(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.
Unix
和 PowerShell
管道的操作方式相同。您可能会看到 Unix
与 PowerShell
之间存在差异的原因是它们的处理方式不同。
Unix
在命令之间传递字符串
。作为 Powershell 管道,将在命令之间传递完整的 .net 对象。命令之间数据类型的这种差异将是它在 unix
上运行而不是在 PowerShell
中运行的原因。如果7z.exe
无法正确地聚集这些.net对象
,则文件将被损坏,See here 。
关于powershell - 在 Windows 上使用 7-zip 通过管道压缩为 tar.xz,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29934762/