जवाबों:
मैं उपयोग करके jsonlz4 को अनपैक करने में सक्षम था lz4json
:
apt-get install liblz4-dev
git clone https://github.com/andikleen/lz4json.git
cd lz4json
make
./lz4jsoncat ~/.mozilla/firefox/*/bookmarkbackups/*.jsonlz4
.json.mozlz4
फ़ाइलों के लिए andikleen समाधान भी अच्छा है जैसे github.com/andikleen/lz4json/issues/1#issuecomment-336729026 (स्वयं पर ध्यान दें: याद रखें, gmake
FreeBSD पर याद रखें ...)।
liblz4-dev
इसे बनाने से पहले स्थापित किया था )। एविह का उपकरण, ओटीओएच, मेरे लिए पूरी तरह से काम करता है।
इस स्क्रिप्ट को किसी फ़ाइल में सहेजें, जैसे 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)
import lz4
था import lz4.block as lz4
, लेकिन यह अभी भी काम नहीं किया। कुछ बाइट्स बनाम स्ट्रिंग संबंधित त्रुटि। OTOH इस स्क्रिप्ट ने आयात परिवर्तन के साथ काम किया: gist.github.com/Tblue/62ff47bef7f894e92ed5
$ pip install lz4
।
असल में लगभग सभी Firefox प्रोफ़ाइल lz4 फ़ाइलें हैं mozlz4 फ़ाइलें। इसका मतलब है कि उनके पास "फ़ाइल प्रारूप हेडर" समान है। सिवाय एक फाइल के। मैं webext.sc.lz4 फ़ाइल के बारे में बात करता हूं । इसमें mozJSSCLz40v001\0
फाइल हेडर है और sc
बाइट स्ट्रीम पर फाइलों के समूह को पैक करने के लिए कुछ पैकेजिंग है।
पढ़ने या संपीड़ित करने के लिए एक फ़ायरफ़ॉक्स एडऑन है। mozlz4 टेक्स्ट फाइल्स mozlz4-edit
इसके लिए पर्याप्त रूप से लगातार Googling बहुत सारे समाधान करता है, लेकिन उनमें से ज्यादातर अंतर्निहित पुस्तकालयों के लिए बाद के परिवर्तनों से टूट गए हैं (या) (बी) अनावश्यक रूप से जटिल (कम से कम मेरे व्यक्तिगत स्वाद के लिए), जिससे यह अधिक स्पष्ट हो जाता है मौजूदा कोड में गिरा।
निम्नलिखित पायथन 2.7 और 3.6 पायथन LZ4 बाइंडिंग के हालिया संस्करण का उपयोग करते हुए कम से कम काम करता है :
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
बेशक यह इनपुट (या आउटपुट) को मान्य करने का प्रयास नहीं करता है, सुरक्षित होने का इरादा नहीं है, आदि, लेकिन अगर कोई बस अपने एफएफ डेटा को पार्स करने में सक्षम होना चाहता है, तो यह मूल काम हो जाता है।
कमांड लाइन संस्करण यहाँ है, जो प्रासंगिक निर्देशिका में बचाया जा सकता है और लागू के रूप में कमांड लाइन से:
chmod +x mozlz4.py
./mozlz4.py <file you want to read> <file to save output to>