나는 다음과 같이 파이썬에서 zlib로 압축된 데이터를 만들었다.
import zlib
s = '...'
z = zlib.compress(s)
with open('/tmp/data', 'w') as f:
f.write(z)
(또는 껍데기 안의 한 줄: '180 -n '...' | python2 -c ' 가져오기 sys,zlib; sys.timeout.write(zlib.din(sys.stdin.read))' > /tmp/data')
이제 셸의 데이터를 압축 해제하겠습니다. zcat도 uncompress도 동작하지 않는다.
$ cat /tmp/data | gzip -d -
gzip: stdin: not in gzip format
$ zcat /tmp/data
gzip: /tmp/data.gz: not in gzip format
$ cat /tmp/data | uncompress -
gzip: stdin: not in gzip format
나는 gzip과 같은 파일을 만들었지만 헤더는 없는 것 같다. 불행하게도 나는 zip man 페이지에서 그러한 원시 데이터를 압축 해제하는 어떤 옵션도 보이지 않으며 zlib 패키지에는 실행 가능한 유틸리티가 포함되어 있지 않다.
원시 zlib 데이터의 압축을 푸는 유틸리티가 있나요?
또 it 압축을 풀 수 사용하는 표준 [태그 셸 스크립트] + [태그: gzip] # 39 를 사용할 경우, 또는 don& 없다 [태그: openssl] 또는 다른 tools.< br> prepend 하는 것이 요령, 즉, 이 gzip 매직 넘버 및 압축 방법 의 실제 데이터 "에서 스리발콤프레스 ':
printf "\x1f\x8b\x08\x00\x00\x00\x00\x00" |cat - /tmp/data |gzip -dc >/tmp/out
Edits:< br>; @d0sboots 평했다. Raw Deflate null 바이트를 2 개 이상의 데이터 추가해야 합니다. < br>; ',' \x1f\x8b\x08\x00\x00\x00\x00\x00\x00\x00" ".
이 Q 합니다 에 대한 자세한 내용은 이 외곽진입. 저 역시 그 답을 알 수 있는 8 바이트 바닥글에.
때문에 gzip 파일 및 사용자 @Vitali-Kushner @mark-bessey 보고됨 성공을 통해 매우 엄격하게 바닥글에 깎은 것 같지는 않다고 합니다.
이 함수는 [태그: 바시르] 의 @tobias-kienzler 제안됩니다 :< br>; '스리포드 () (printf " \x1f\x8b\x08\x00\x00\x00\x00\x00"; cat - $ @ gzip - dc) '
해결 방법(가능한 방법 중 하나)을 찾았습니다. 이 솔루션은 openssl를 사용합니다.
$ openssl zlib -d < /tmp/data
또는
$ openssl zlib -d -in /tmp/data
*참고: zlib 기능은 최근 openssl 버전 >=1.0.0에서 사용할 수 있는 것으로 보입니다(OpenSSL은 zlib 또는 zlib-dynamic 옵션으로 구성/빌드되어야 하며, 후자는 기본값입니다).
내가 추천하는 피조 에서 [마크 아들러], 2 의 저자인 zlib 압축이란 라이브러리란. '실행' 피조 사용 가능한 국기를 볼 수 있습니다.
것을 알게 됩니다.
gzip 압축 기술을 zlib (이치) 대신 '-' z zlib 형식으로.
사용하여 압축을 해제할 수 있습니다 '-d' 플래깅:
d - 압축 해제 압축을 풀지 압축됨 입력입니다. '-'
Osx 설치 피조 브루 (brew) '에서 실행할 수 있습니다'
이렇게 하면 됩니다.
import glob
import zlib
import sys
for filename in sys.argv:
with open(filename, 'rb') as compressed:
with open(filename + '-decompressed', 'wb') as expanded:
data = zlib.decompress(compressed.read())
expanded.write(data)
그럼 이렇게 실행해 보세요.
$ python expander.py data/*
예를 들면 ' [늑대굴에서 여기서요] 스피프스키 프로그램' (https://www.zlib.net/zpipe.c) 에 자살했죠 lesher 아들러 (에는 소스 분포됩니다 zlib library) 는 다음과 같은 시나리오를 기초형상 zlib 데이터를 통해 매우 유용합니다. 참조 - o - lz '와' 로 컴파일 스피페 스피프스키 압축을 풀 수: d '스피페 <. 로이스 리브 >. 압축을 풀 '. 또한 압축을 할 수 없이 '-d' 플래깅.
Macos 에서, 이는 전체 POSIX 호환 bsbab-unix (공식 인증!) ',' 없다 '' zlib flate 인컨텍스트 zlib '지원, openssl 주님으로부터그에게' 동안 첫 번째 솔루션을 비롯한 모든 작동됨 파이썬 파일과 zip 위해서는 데이터 솔루션, 첫 번째 솔루션의 경우 다른 모든 솔루션뀉뀉뀉뀉 인력용 파이썬 스크립트를 작성할 수 있습니다.
S # 39, 펄 (perl) 로 사용될 수 있는 기반 솔루션을 here& 명령줄이 한 줄 광고문, out of the box) 를 통해 사용할 수 있는 입력입니다 가져옵니다 stdin 파이프 및 새로 설치된 macos.
cat file.compressed | perl -e 'use Compress::Raw::Zlib;my $d=new Compress::Raw::Zlib::Inflate();my $o;undef $/;$d->inflate(<>,$o);print $o;'
괜찮게 포맷되었는지, Perl 스크립트 다음과 같습니다.
use Compress::Raw::Zlib;
my $decompressor = new Compress::Raw::Zlib::Inflate();
my $output;
undef $/;
$decompressor->inflate(<>, $output);
print $output;