3

Я вытащил из Интернета zip-файл, который был упакован в систему, в которой имена файлов были закодированы в формате, который моя программа распаковки не может прочитать. Возможно, файловая система не поддерживает эти странные символы или оболочку. Я не совсем уверен.

Поскольку меня не волнует имя файла, приемлемым решением было бы переименовать файл или записать содержимое в файл с именем, отличным от имени, указанного в архиве. Это возможно с помощью обычной утилиты командной строки zip? Если так, то как. Другие предложения о том, что может быть не так (возможно, это не утилита zip), также приветствуются.

Симптомы следующие:


$ unzip -l 3688232.zip ; unzip 3688232.zip 
Archive:  3688232.zip
  Length      Date    Time    Name
---------  ---------- -----   ----
   107937  10-24-2012 01:00   [-?M+?V+?e-?] Le Gout Des autres - Agn+?s Jaoui - 2000 (sep subs).srt
     6354  10-24-2012 01:00   le.gout.des.autres.(3688232).nfo
---------                     -------
   114291                     2 files
Archive:  3688232.zip
error:  cannot create [-?M+?V+?e-?] Le Gout Des autres - Agn+?s Jaoui - 2000 (sep subs).srt
        Invalid or incomplete multibyte or wide character

$ unzip --help 
UnZip 6.00 of 20 April 2009, by Info-ZIP.  Maintained by C. Spieler.  Send
bug reports using http://www.info-zip.org/zip-bug.html; see README for details.

Замечания:
Меня не особенно интересуют предложения, связанные с графическими архиваторами, потому что я уже успешно извлек файл с помощью Wine WinRAR.exe.

4 ответа4

3

Мне удалось получить все файлы с Python:

import zipfile
z = zipfile.ZipFile('file.zip')
for i, f in enumerate(z.filelist):
    f.filename = 'file_{0:03}'.format(i)
    z.extract(f)

Вы также получите несколько пустых файлов, соответствующих записям в каталоге.

2

Можете ли вы попробовать unzip -p file.zip archivedfilename.ext > newfilename.ext?

0

В жуке, поданный разархивируют, Яннис TSOP (ogiannhs) написал 2010-05-25: # 12

с помощью 7-zip это можно решить!

например:

LANG=el_GR.CP737 7z x -oPATH file.zip 
convmv -r --notest -f utf-8 -t CP737 PATH/*
0

В пакет GNU Info-Zip входит утилита zipnote которая позволяет редактировать имена файлов внутри zip-архива, а также управлять комментариями к файлам ("заметками").

zipnote -w file.zip <<<$'@ oldname\n@=newname'

Кажется, вы должны точно знать старое имя; нет подстановочных знаков поддержки.

Также кажется, что вы можете переименовывать только один файл за раз. В итоге я переименовал все файлы в архиве:

unzip -Z1 file.zip |
awk '{ printf "file%06i %s\n", NR, $1 }' |
while read -r to from; do
    printf '@ %s\n@=%s\n' "$from" "$to" | zipnote -w file.zip
done

(Обратите внимание на хитрость для печати регуляризованного имени файла "$to" первым в сценарии Awk.)

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .