在Powershell中制作的Zip文件无法在Linux中使用

MyW*_*ays 7 linux zip encoding

我有一个包含子文件夹和文件的文件夹。我通过 powershell 创建一个 .zip 文件Compress-Archive

\n\n

问题是在 Linux 中打开时文件结构混乱。

\n\n

Bad 是用 Powershell 制作的 bad.zip 存档Compress-Archive,\n而 Good 是用 Windows\' WinRAR 制作的 good.zip。

\n\n

这就是它在 Linux 上的样子:(左为坏,右为好)

\n\n

图片1

\n\n

在 Linux 中看到的文件内容为cat:(左边是坏的,右边是好的):

\n\n

图2

\n\n

如何解决这个问题?

\n\n

...

\n\n

我尝试用 nano 中的“/”替换 bad.zip 中的所有“\\”,并且它有效

\n\n

我尝试使用此脚本自动执行此操作,但没有成功:

\n\n
#!/bin/bash\n\ncontents=$(cat $1)\necho "${contents//\\\\//}"\n
Run Code Online (Sandbox Code Playgroud)\n\n

我运行脚本:

\n\n
./FixZip.sh bad.zip > new.zip\n
Run Code Online (Sandbox Code Playgroud)\n\n

反斜杠已按预期替换,但无法打开 new.zip。原因可能是编码不同......

\n\n

这是 zip 文件的编码:

\n\n
terminal:# file -i bad.zip \nbad.zip: application/zip; charset=binary\nterminal:# encguess bad.zip \nbad.zip UTF-32LE\n\nterminal:# file -i new.zip \nnew.zip: application/octet-stream; charset=binary\nterminal:# encguess new.zip \nnew.zip unknown\n\nterminal:# cat new.zip\nP5\xef\xbf\xbdWMCw:a_folder/test2.txt+\xef\xbf\xbd\xef\xbf\xbdIP7\xef\xbf\xbdWM\xef\xbf\xbd\xef\xbf\xbd\xef\xbf\xbda_folder/test3.txt\xef\xbf\xbd(*P4\xef\xbf\xbdWM\xef\xbf\xbd\xef\xbf\xbd6a_folder/subf/test1.txt\xef\xbf\xbdH\xef\xbf\xbd\xef\xbf\xbd\xef\xbf\xbdP5\xef\xbf\xbdWMCw:a_folder/test2.txtP7\xef\xbf\xbdWM\xef\xbf\xbd\xef\xbf\xbd\xef\xbf\xbd7a_folder/test3.txt4\xef\xbf\xbdWM\xef\xbf\xbd\xef\xbf\xbd6ma_folder/subf/test1.txtPK\xc5\xa9\n
Run Code Online (Sandbox Code Playgroud)\n

AFH*_*AFH 2

您尝试做的事情有很多问题 - 最重要的是:-

  1. 您无法在不损坏 zip 文件的情况下对其进行编辑:这通常会通过其校验和来检测,并且会报告损坏的文件。
  2. echo $contents(或其他扩展变体)将用单个空格替换任何空白字符序列。
  3. 反斜杠将出现在压缩数据以及文件索引中,因此替换它们将进一步损坏文件。

最令人满意的答案是使用跨平台存档器,例如7-Zip,它将使用通用目录分隔符保存存档,并以调用它的平台的本机格式进行扩展。

在 Windows 中,我使用Portable Apps版本,它可以通过 PortableApps Suite 界面运行,也可以直接从其目录单独运行;便携式版本包含 32 位和 64 位版本,并包含7z.exe命令行界面(可以使用同一目录中的 DLL)。

目前尚不清楚为什么在日志中PK应该替换幻数,但我猜测二进制文件中的回车、退格或转义字符可以解释这一点。正如卡米尔·马乔罗夫斯基(Kamil Maciorowski)在评论中建议的那样,xxd他将澄清正在发生的事情。