कमांड लाइन का उपयोग करके jsonlz4 फ़ाइलों (फ़ायरफ़ॉक्स बुकमार्क बैकअप) को कैसे डिकम्पोज करें?


22

ऐसा प्रतीत होता है कि विभिन्न जावास्क्रिप्ट + ब्राउज़र इसे डिकम्प्रेस करने के विशिष्ट तरीके हैं, लेकिन क्या कुछ unlz4पढ़ने के लिए jsonlz4 फ़ाइलों को बदलने का कोई तरीका नहीं है ?


जवाबों:


18

मैं उपयोग करके jsonlz4 को अनपैक करने में सक्षम था lz4json:

apt-get install liblz4-dev
git clone https://github.com/andikleen/lz4json.git
cd lz4json
make
./lz4jsoncat ~/.mozilla/firefox/*/bookmarkbackups/*.jsonlz4

1
.json.mozlz4फ़ाइलों के लिए andikleen समाधान भी अच्छा है जैसे github.com/andikleen/lz4json/issues/1#issuecomment-336729026 (स्वयं पर ध्यान दें: याद रखें, gmakeFreeBSD पर याद रखें ...)।
ग्राहम पेरिन

3
इसके अलावा: Bugzilla.mozilla.org/show_bug.cgi?id=1209390#c4 (2016-05-13) मोज़िला बग 1209390 के तहत - गैर-मानक jsonlz4 के बजाय मानक lz4 फ़ाइल प्रारूप का उपयोग करें (mozlz4 avih / dejsonlz4 पर ध्यान आकर्षित करता है : Decompress मोज़िला फ़ायरफ़ॉक्स बैकअप फ़ाइलों को बुकमार्क करता है
ग्राहम पेरिन

1
FWIW, andikleen का टूल संकलन करने में विफल रहा, "LZ4_decompress_safe_partial" के लिए अपरिभाषित संदर्भ (मैं liblz4-devइसे बनाने से पहले स्थापित किया था )। एविह का उपकरण, ओटीओएच, मेरे लिए पूरी तरह से काम करता है।
वॉलीड्रिअस

1
क्या यह विडंबना नहीं है कि एक ओपन-वेब ऑर्ग उपयोगकर्ता के डेटा के लिए एक मालिकाना संपीड़न प्रारूप का उपयोग कर रहा है, जो आपके स्वयं के डेटा की जांच करने के लिए गैर-तुच्छ बना रहा है ?!
cnst

@ ग्राहम-पेरिन: dejsonlz4 ने मेरे लिए बहुत अच्छा काम किया। यह अनुरोध के अनुसार " jsonlz4 फ़ाइलों को कुछ अनलग 4 में पढ़ेगा " में परिवर्तित नहीं करता है, लेकिन सीधे उन्हें डिकम्प्रेस करता है। इसे अधिक दृश्यमान बनाने के लिए इसका वास्तविक उत्तर देना अच्छा होगा।
मिविक

17

इस स्क्रिप्ट को किसी फ़ाइल में सहेजें, जैसे 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
user31389

1
@ user31389: मैंने स्क्रिप्ट को अपडेट किया। क्या अब यह काम करता है?
हॉकोन ए। होजॉर्टलैंड

जब तक मैंने नहीं किया मेरे लिए काम नहीं कर रहा था $ pip install lz4
डैनियल

5

असल में लगभग सभी Firefox प्रोफ़ाइल lz4 फ़ाइलें हैं mozlz4 फ़ाइलें। इसका मतलब है कि उनके पास "फ़ाइल प्रारूप हेडर" समान है। सिवाय एक फाइल के। मैं webext.sc.lz4 फ़ाइल के बारे में बात करता हूं । इसमें mozJSSCLz40v001\0फाइल हेडर है और scबाइट स्ट्रीम पर फाइलों के समूह को पैक करने के लिए कुछ पैकेजिंग है।

पढ़ने या संपीड़ित करने के लिए एक फ़ायरफ़ॉक्स एडऑन है। mozlz4 टेक्स्ट फाइल्स mozlz4-edit


4

इसके लिए पर्याप्त रूप से लगातार 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>
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.