zip 파일을 만드는 방법v2.0?
OpenDocument 파일은 zip 파일 v2.0인 것으로 보입니다.
$ file foo.odt
foo.odt: OpenDocument Text
$ hexdump -C -n 16 foo.odt
00000000 50 4b 03 04 14 00 00 08 00 00 03 0d 47 42 5e c6 |PK..........GB^.|
00000010
다섯 번째 바이트는 입니다 0x14
.
하지만 압축을 풀고 foo.odt
에 다시 압축 하면 bar.odt
v1.0 zip 파일이 생성됩니다.
$ unzip -d foo foo.odt
$ cd foo/
$ zip -0 -X ../bar.odt mimetype
$ zip -r ../bar.odt * -x mimetype
$ file ../bar.odt
bar.odt: Zip archive data, at least v1.0 to extract
$ hexdump -C -n 16 ../bar.odt
00000000 50 4b 03 04 0a 00 00 00 00 00 00 90 46 42 5e c6 |PK..........FB^.|
00000010
다섯 번째 바이트는 입니다 0x0a
.
zip(2.32), 데비안(6.0)
답변1
편집 : 알았어. v0.1이 아닌 v1.0을 얻을 수 있도록 질문이 업데이트되었습니다 . 더 이상 적용할 수 없습니다.
버전은 파일의 "강력함"이 아니라 파일의 기능입니다.최저 한도에서압축을 풀려면 버전이 필요합니다.저것아카이브의 파일.
이것은아니요전체 버전을 아카이브했습니다!
여기서 한 가지 차이점은 예를 들어 OO 태그라는 것입니다.모두버전 요구 사항이 동일한 파일입니다. 이것은 다시 문서(모든 아카이브)에서 가장 까다로운 부분입니다.
그건. 각 파일에는 파일을 추출하는 데 필요한 최소 버전을 지정하는 zip 헤더가 있습니다. 위와 같이 우리는 일반적으로 다음을 갖습니다.
archive-files PackType Zip-Required OO-Header `zip`-header
+--------------------------------------------------------------+
| mimetype Store 1.0 2.0 1.0 |__ foo.odt
| content.xml Deflate 2.0 2.0 2.0 |
+---------------------------------------------------------------+
따라서 OO는 필수 플래그가 1.0임에도 불구하고 2.0으로 설정합니다.그러나 이는 문서를 여는 기능에는 영향을 미치지 않습니다. ( mimetype
수동으로 압축한 파일은 v1.0으로 표시되어 있어도 OO에서 열 수 있습니다.)
버전
foo.odt:
1400 Version needed to extract.
0008 General Purpose
0000 Compression method
필요한 버전 추출여기서 낮은 바이트인 은 0x14
10으로 나누고 모듈로를 취하여 변환됩니다.
Major: 0x14 / 0x0a = 2
Minor: 0x14 % 0x0a = 0
버전 2.0이라고도 함
상위 바이트는 0x00
파일이 호환되는 항목을 나타냅니다. 0인 경우 MS-DOS(FAT, FAT32, VFAT)와 호환됩니다. 그렇지 않으면 매핑에 의해 지정됩니다. 예를 들어, zip
시스템에서 옵션을 사용하지 않으면 0x03
Unix를 나타내는 메시지가 나타납니다. 0x0a
NTFS 등인가요?
버전 2.0의 의미: (4.4.3.2 현재 최소 기능 버전)
* File is a folder (directory)
* File is compressed using Deflate compression
* File is encrypted using traditional PKWARE encryption
zip 파일에는 다음이 있습니다.
bar.odt:
0a00 Version needed to extract.
0000 General Purpose
0000 Compression method
Major: 0x0a / 0x0a = 1
Minor: 0x0a % 0x0a = 0
버전 1.0이라고도 함
버전 1.0은 기본값일 뿐입니다.
파일 계층 구조 및 최소 버전
1.0
아래 버전이 보이는 이유는 무엇인가요?필요한 버전 추출- 당신이요?실제로 본다파일의 zip 헤더입니다 mimetype
. 파일은 압축되지 않고 다음과 같이 저장됩니다.아니요압축. 따라서 1.0
파일을 추출하려면 해당 버전만 필요합니다 . 그러나 이것은 아카이브의 전체적인 버전이 아닙니다. 더 자세히 살펴보면 deflate로 저장된 파일을 찾을 때마다 버전 2.0을 찾을 수 있습니다. 다음을 통해 확인할 수 있습니다:
hexdump -v -e '/1 "%02x "' bar.odt | grep -o '50 4b 03 04 .\{6\}'
당신에게 다음과 같은 것을 주어야합니다
50 4b 03 04 0a 00
50 4b 03 04 0a 00
...
50 4b 03 04 14 00
50 4b 03 04 14 00
50 4b 03 04 0a 00
50 4b 03 04 14 00
...
중앙 디렉터리 파일 헤더
일부 파일에는 확장자 헤더가 있습니다. 다음을 통해 이를 나열할 수 있습니다.
hexdump -v -e '/1 "%02x "' foo.odt | grep -o '50 4b 01 02.\{16\}'
( hexdump -n 4 foo.odt가 그렇게 말하면 50 4b ...
반대로 해야 한다는 것을 기억하세요)02 01 4b 50
이를 통해 일반적으로 다음을 얻습니다.
____________ Version required (2.0)
| |
50 4b 01 02 14 00 14 00 00
50 4b 01 02 14 00 14 00 00
50 4b 01 02 14 00 14 00 08
|___|
|
+-------------- Version supported by packing application. v2.0
zip
생성된 파일 에서 다음 예를 얻을 수 있습니다.
____________ Version required for this file (2.0)
| |
50 4b 01 02 1e 03 14 00 00
|___|
|
+-------------- Version supported by packing
application. v3.0
범용(및 odt 파일에 설정된 기타 플래그)
이것은 비트 플래그입니다. 파일이 빅 엔디안/모토로라이므로 플래그는 다음과 같습니다.
0x0800 = 0000 1000 0000 0000
|
+---------------- 11 => File names and comments MUST be
stored as Utf-8.
최소한 LibreOffice는 다양한 모드를 사용하여 더 많은 비용을 절약할 수 있습니다.
mimetype
항상 첫 번째 항목이며 압축하면 안 됩니다. 이는 다양한 소프트웨어가 파일과 그 내용을 식별하는 데 도움이 됩니다. 예를 들면 다음과 같습니다.
$ hexdump -C -s 38 -n 39 foo.odt
00000026 61 70 70 6c 69 63 61 74 69 6f 6e 2f 76 6e 64 2e |application/vnd.|
00000036 6f 61 73 69 73 2e 6f 70 65 6e 64 6f 63 75 6d 65 |oasis.opendocume|
00000046 6e 74 2e 74 65 78 74 |nt.text|
일반적으로 모든 디렉터리가 저장 되지만 zip
OO는 빈 디렉터리만 저장합니다. 그러므로:
압축:
Thumbnails/
Thumbnails/thumbnail.png
META-INF/
META-INF/manifest.xml
오:
Thumbnails/thumbnail.png
META-INF/manifest.xml
등...
답변2
말씀하신 대로 ODF 문서는 zip 파일입니다. 위키피디아를 보세요입구. 이것zip 형식2바이트 버전, 리틀 엔디안, 오프셋 4가 있어야 합니다. 헤더 시작 0x04034b50
(리틀 엔디안, 확인), 버전은 2바이트입니다( 귀하의 ODT와 제가 2006년부터 0x000a
자체 압축 케이스에 보관해 온 바이트). 0x0014
형식은 다양한 버전에 맞게 조정됩니다.
불행하게도 내 로컬 페이지 zip(1L)
와 unzip(1L)
매뉴얼 페이지에는 처리되는 형식에 대한 내용이 전혀 없습니다. 내 현재 zip 생성 버전 0x0014
(zip-3.0-5.fc18.x86_64, Fedora 18). zip 버전 3 정도가 필요한 것 같습니다.