zip-файл в формате fat (на Linux)

zip-файл в формате fat (на Linux)

Я пытаюсь импортировать контакты с micro-SD на телефон Nokia (не Android). Поэтому я сначала экспортировал текущие контакты на карту micro-SD в надежде, что смогу изменить экспортированный файл, а затем импортировать его.

Экспортированный тип файла — файл резервной копии Nokia .NBF. Похоже, на самом деле это обычный zipфайл.

Я могу распаковать экспортированный .NBFфайл и изменить его (контакты хранятся в .vcf - vcard).

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

 

Я проверил zip-файлы с помощью zipinfo:

Неизмененный файл:

$ zipinfo Backup001.NBF
Archive:  Backup001.NBF
Zip file size: 3031 bytes, number of entries: 10
-rw-a--     0.0 fat     1160 b- stor 20-Mar-30 11:31 predefhiddenfolder/predefisasettings/usersettings/user_settings.wbxml
dr-x-hs     0.0 fat        0 b- stor 10-Jan-01 00:00 predefhiddenfolder/predefisasettings/usersettings
dr-xahs     0.0 fat        0 b- stor 07-Jan-01 00:00 predefhiddenfolder/predefisasettings
dr-xahs     0.0 fat        0 b- stor 07-Jan-01 00:00 predefhiddenfolder
-rw-a--     0.0 fat      214 b- defN 20-Mar-30 11:31 predefhiddenfolder/backup/WIP/F01
drwxa--     0.0 fat        0 b- defN 20-Mar-30 11:31 predefhiddenfolder/backup/WIP
drwxa--     0.0 fat        0 b- defN 10-Jan-01 00:00 predefhiddenfolder/backup
-rw-a--     0.0 fat      256 b- defN 20-Mar-30 11:31 predefhiddenfolder/backup/WIP/32/contacts/1.vcf
drwxa--     0.0 fat        0 b- defN 20-Mar-30 11:31 predefhiddenfolder/backup/WIP/32/contacts
drwxa--     0.0 fat        0 b- defN 20-Mar-30 11:31 predefhiddenfolder/backup/WIP/32
10 files, 1630 bytes uncompressed, 1409 bytes compressed:  13.6%

затем я изменяю 1.vcfи обновляю Backup001.NBFс помощью:

zip Backup001.NBF -f -r predefhiddenfolder/backup/WIP/32/contacts/1.vcf

Изменено:

$ zipinfo Backup001.NBF
Archive:  Backup001.NBF
Zip file size: 2958 bytes, number of entries: 10
-rw-a--     0.0 fat     1160 b- stor 20-Mar-30 11:31 predefhiddenfolder/predefisasettings/usersettings/user_settings.wbxml
dr-x-hs     0.0 fat        0 b- stor 10-Jan-01 00:00 predefhiddenfolder/predefisasettings/usersettings
dr-xahs     0.0 fat        0 b- stor 07-Jan-01 00:00 predefhiddenfolder/predefisasettings
dr-xahs     0.0 fat        0 b- stor 07-Jan-01 00:00 predefhiddenfolder
-rw-a--     0.0 fat      214 b- defN 20-Mar-30 11:31 predefhiddenfolder/backup/WIP/F01
drwxa--     0.0 fat        0 b- defN 20-Mar-30 11:31 predefhiddenfolder/backup/WIP
drwxa--     0.0 fat        0 b- defN 10-Jan-01 00:00 predefhiddenfolder/backup
-rw-r--r--  3.0 unx      208 tx defN 20-Apr-03 01:04 predefhiddenfolder/backup/WIP/32/contacts/1.vcf
drwxa--     0.0 fat        0 b- defN 20-Mar-30 11:31 predefhiddenfolder/backup/WIP/32/contacts
drwxa--     0.0 fat        0 b- defN 20-Mar-30 11:31 predefhiddenfolder/backup/WIP/32
10 files, 1582 bytes uncompressed, 1366 bytes compressed:  13.7%

в этой строке: -rw-r--r-- 3.0 unx 208 tx defN 20-Apr-03 01:04 predefhiddenfolder/backup/WIP/32/contacts/1.vcfговорится, что формат — 3.0 unx.

есть ли способ заархивировать его так, чтобы формат был 0.0 fat?

 

Редактировать: добавил некоторые пояснения

Редактировать: Я попробовал использовать -kфлаг, как предложил @FennecTECH

Выглядит лучше, но все еще не работает.

$ zipinfo Backup000.NBF
Archive:  Backup000.NBF
Zip file size: 2501 bytes, number of entries: 10
drwx---     2.0 fat        0 bx stor 20-Apr-03 00:37 PREDEFHI/
drwx---     2.0 fat        0 bx stor 20-Apr-03 00:36 PREDEFHI/PREDEFIS/
drwx---     2.0 fat        0 bx stor 20-Apr-03 00:36 PREDEFHI/PREDEFIS/USERSETT/
-rw----     2.0 fat     1160 bx defN 20-Mar-30 11:31 PREDEFHI/PREDEFIS/USERSETT/USER_SET.WBX
drwx---     2.0 fat        0 bx stor 20-Apr-03 00:37 PREDEFHI/BACKUP/
drwx---     2.0 fat        0 bx stor 20-Apr-03 00:37 PREDEFHI/BACKUP/WIP/
drwx---     2.0 fat        0 bx stor 20-Apr-03 00:37 PREDEFHI/BACKUP/WIP/32/
drwx---     2.0 fat        0 bx stor 20-Apr-03 01:04 PREDEFHI/BACKUP/WIP/32/CONTACTS/
-rw----     2.0 fat      208 tx defN 20-Apr-03 01:04 PREDEFHI/BACKUP/WIP/32/CONTACTS/1.VCF
-rw----     2.0 fat      214 bx defN 20-Mar-30 11:31 PREDEFHI/BACKUP/WIP/F01

аналогичный вопрос, который не решил проблему: https://stackoverflow.com/questions/15033646/метод-сжатия-для-xlsx-with-7z

решение1

Это можно сделать с помощью Go:

package main
import (
   "archive/zip"
   "io"
   "os"
)
const creatorFAT = 0
func main() {
   // in
   file, _ := os.Open("in.txt")
   info, _ := file.Stat()
   head, _ := zip.FileInfoHeader(info)
   // default is Unix
   head.CreatorVersion = creatorFAT
   // out
   zipfile, _ := os.Create("out.zip")
   archive := zip.NewWriter(zipfile)
   // write
   writer, _ := archive.CreateHeader(head)
   io.Copy(writer, file)
   archive.Close()
}

Результат:

$ zipinfo out.zip
Archive:  out.zip
Zip file size: 151 bytes, number of entries: 1
-rw-rw-rw-  2.0 fat        7 bX stor 20-Apr-02 19:54 in.txt
1 file, 7 bytes uncompressed, 7 bytes compressed:  0.0%

решение2

Вам нужно будет распаковать папку. Затем снова заархивируйте ее с опцией -k. Это даст вам 2.0 fat. Я не знаю, сработает ли это, но попробовать стоит. Вам нужно будет сделать это с помощью командной строки.

решение3

Я думаю, что проблема в файле user_settings.wbxml. Там должны обновляться некоторые вещи, вероятно, в зависимости от размера файла или количества контактов.

решение4

Позвольте мне представить вам мой мощный инструмент, который делает это автоматически. https://github.com/pas-calc/nokia-contacts

Вы можете настроить этот скрипт под свои нужды. Для Python вам следует придерживаться from zipfile import ZipFile.

Связанный контент