Mam folder z podfolderami i plikami. Plik .zip tworzę za pomocą programu PowerShell Compress-Archive
.
Problem polega na tym, że struktura plików jest popsuta po otwarciu w systemie Linux.
Bad to archiwum bad.zip wykonane w programie Powershell Compress-Archive
, a Good is good.zip wykonane w systemie Windows WinRAR.
Tak to wygląda w systemie Linux: (lewy jest zły, prawy jest dobry)
Zawartość pliku widoczna w systemie Linux z cat
: (lewy jest zły, prawy jest dobry):
Jak rozwiązać ten problem?
...
Próbowałem zamienić wszystkie „\” w bad.zip na „/” w nano i zadziałało .
Próbowałem zautomatyzować to za pomocą tego skryptu, ale bezskutecznie:
#!/bin/bash
contents=$(cat $1)
echo "${contents//\\//}"
Uruchamiam skrypt:
./FixZip.sh bad.zip > new.zip
Odwrotne ukośniki zostały zastąpione zgodnie z przeznaczeniem, ale nie można otworzyć new.zip. Powodem jest prawdopodobnie kodowanie jest inne ...
To jest kodowanie plików zip:
terminal:# file -i bad.zip
bad.zip: application/zip; charset=binary
terminal:# encguess bad.zip
bad.zip UTF-32LE
terminal:# file -i new.zip
new.zip: application/octet-stream; charset=binary
terminal:# encguess new.zip
new.zip unknown
terminal:# cat new.zip
P5�WMCw:a_folder/test2.txt+��IP7�WM���a_folder/test3.txt�(*P4�WM��6a_folder/subf/test1.txt�H���P5�WMCw:a_folder/test2.txtP7�WM���7a_folder/test3.txt4�WM��6ma_folder/subf/test1.txtPKũ
$(cat $1)
zastąpi dowolną sekwencję znaków spacji pojedynczym spacją; (3) ukośniki pojawią się w skompresowanych danych, a także w indeksie plików, więc ich zastąpienie spowoduje dalsze uszkodzenie pliku. Nie jest oczywiste, dlaczego PK
magiczna liczba powinna zostać zastąpiona, ale przypuszczam, że to wyjaśnia znaki powrotu, spacji lub ucieczki w pliku binarnym. Jak zaleca @KamilMaciorowski, xxd
wyjaśni, co się dzieje.
PortableApps\
katalogu, który zawiera 32- i 64-bitowe wersje zarówno GUI, jak i wersji 7z.exe
wiersza poleceń, które, jak sądzę, będą potrzebowały jednego lub więcej .dll
plików.