이것을 압축 해제하는 다양한 JavaScript + 브라우저 특정 방법이있는 unlz4
것 같지만 jsonlz4 파일을 무언가로 변환하는 방법이 있습니까?
답변
다음을 사용하여 jsonlz4의 포장을 풀 수있었습니다 lz4json
.
apt-get install liblz4-dev
git clone https://github.com/andikleen/lz4json.git
cd lz4json
make
./lz4jsoncat ~/.mozilla/firefox/*/bookmarkbackups/*.jsonlz4
답변
이 스크립트를 파일에 저장하십시오 (예 mozlz4
:
#!/usr/bin/env python
from sys import stdin, stdout, argv, stderr
import os
try:
import lz4.block as lz4
except ImportError:
import lz4
stdin = os.fdopen(stdin.fileno(), 'rb')
stdout = os.fdopen(stdout.fileno(), 'wb')
if argv[1:] == ['-c']:
stdout.write(b'mozLz40\0' + lz4.compress(stdin.read()))
elif argv[1:] == ['-d']:
assert stdin.read(8) == b'mozLz40\0'
stdout.write(lz4.decompress(stdin.read()))
else:
stderr.write('Usage: %s -c|-d < infile > outfile\n' % argv[0])
stderr.write('Compress or decompress Mozilla-flavor LZ4 files.\n\n')
stderr.write('Examples:\n')
stderr.write('\t%s -d < infile.json.mozlz4 > outfile.json\n' % argv[0])
stderr.write('\t%s -c < infile.json > outfile.json.mozlz4\n' % argv[0])
exit(1)
답변
사실 거의 모든 파이어 폭스 프로필 lz4의 파일은 mozlz4 파일. 이는 동일한 “파일 형식 헤더”를 가지고 있음을 의미합니다. 하나의 파일을 제외하고. webext.sc.lz4 파일 에 대해 이야기 합니다. 그것은이 mozJSSCLz40v001\0
파일 헤더 어쩌면 일부 sc
바이트 스트림에 파일 팩 그룹에 포장.
.mozlz4 텍스트 파일 을 읽거나 압축하는 Firefox 애드온이 있습니다. mozlz4-edit
답변
이것에 대한 충분히 지속적인 인터넷 검색은 많은 해결책을 제시하지만, 대부분은 (a) 기본 라이브러리의 후속 변경으로 인해 깨지거나 (b) 불필요하게 복잡한 (적어도 내 개인적인 취향에 따라) 기존 코드에 드롭하십시오.
다음은 최신 버전의 Python LZ4 바인딩을 사용하여 Python 2.7 및 3.6에서 작동하는 것으로 보입니다 .
def mozlz4_to_text(filepath):
# Given the path to a "mozlz4", "jsonlz4", "baklz4" etc. file,
# return the uncompressed text.
import lz4.block
bytestream = open(filepath, "rb")
bytestream.read(8) # skip past the b"mozLz40\0" header
valid_bytes = bytestream.read()
text = lz4.block.decompress(valid_bytes)
return text
물론 이것은 입력 (또는 출력)의 유효성을 검사하려고 시도하지 않으며 보안 등을 의도하지는 않지만 자신의 FF 데이터를 구문 분석하려는 경우 기본 작업을 수행합니다.
명령 행 버전 here . 관련 디렉토리에 저장하고 명령 행에서 다음과 같이 호출 할 수 있습니다.
chmod +x mozlz4.py
./mozlz4.py <file you want to read> <file to save output to>