명령 줄을 사용하여 jsonlz4 파일 (Firefox bookmark backup)의 압축을 해제하는 방법? 브라우저 특정 방법이있는 unlz4것 같지만 jsonlz4

이것을 압축 해제하는 다양한 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>