MyW*_*ays 7 linux zip encoding
我有一个包含子文件夹和文件的文件夹。我通过 powershell 创建一个 .zip 文件Compress-Archive
。
问题是在 Linux 中打开时文件结构混乱。
\n\nBad 是用 Powershell 制作的 bad.zip 存档Compress-Archive
,\n而 Good 是用 Windows\' WinRAR 制作的 good.zip。
这就是它在 Linux 上的样子:(左为坏,右为好)
\n\n\n\n在 Linux 中看到的文件内容为cat
:(左边是坏的,右边是好的):
如何解决这个问题?
\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\nterminal:# 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
您尝试做的事情有很多问题 - 最重要的是:-
echo $contents
(或其他扩展变体)将用单个空格替换任何空白字符序列。最令人满意的答案是使用跨平台存档器,例如7-Zip,它将使用通用目录分隔符保存存档,并以调用它的平台的本机格式进行扩展。
在 Windows 中,我使用Portable Apps版本,它可以通过 PortableApps Suite 界面运行,也可以直接从其目录单独运行;便携式版本包含 32 位和 64 位版本,并包含7z.exe
命令行界面(可以使用同一目录中的 DLL)。
目前尚不清楚为什么在日志中PK
应该替换幻数,但我猜测二进制文件中的回车、退格或转义字符可以解释这一点。正如卡米尔·马乔罗夫斯基(Kamil Maciorowski)在评论中建议的那样,xxd
他将澄清正在发生的事情。