কমান্ড লাইনটি ব্যবহার করে কীভাবে jsonlz4 ফাইলগুলি (ফায়ারফক্স বুকমার্ক ব্যাকআপগুলি) সঙ্কুচিত করবেন?


22

এটি বিভিন্ন জাভাস্ক্রিপ্ট + ব্রাউজারে এটি সংক্ষেপিত করার নির্দিষ্ট উপায় রয়েছে বলে মনে হচ্ছে, তবে jsonlz4 ফাইলগুলিকে কিছুতে রূপান্তর করার কোনও উপায় unlz4পড়বে না?


উত্তর:


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ফাইলগুলির জন্য যেমন: github.com/andikleen/lz4json/issues/1#issuecomment-336729026 এ দেখানো হয়েছে ( স্বতঃ দ্রষ্টব্য: মনে রাখবেন, মনে রাখবেন, gmakeফ্রিবিএসডি তে…) for
গ্রাহাম পেরিন 18

3
এছাড়াও: bugzilla.mozilla.org/show_bug.cgi?id=1209390#c4 (2016-05-13) মজিলা বাগ 1209390 এর অধীনে - অ-স্ট্যান্ডার্ড jsonlz4 / mozlz4 এর পরিবর্তে স্ট্যান্ডার্ড lz4 ফাইল ফর্ম্যাট ব্যবহার করুন: avih / dejsonlz4 এর দিকে দৃষ্টি আকর্ষণ করে : মোজিলা ফায়ারফক্স বুকমার্ক ফাইলগুলিকে
গ্রাহাম পেরিন

1
FWIW, andikleen এর সরঞ্জামটি "LZ4_decompress_safe_partial এর অপরিজ্ঞাত রেফারেন্স" ত্রুটি সহ ( liblz4-devএটি নির্মাণের আগে ইনস্টল করেছি) সংকলন করতে ব্যর্থ হয়েছিল । avih এর সরঞ্জাম, OTOH আমার জন্য পুরোপুরি কাজ করেছিল।
ওয়াল্ডরিয়াস

1
এটি কি বিড়ম্বনার বিষয় নয় যে একটি ওপেন-ওয়েব org ব্যবহারকারীর ডেটার জন্য স্বত্বগত সংকোচনের বিন্যাসটি ব্যবহার করছে, এটি আপনার নিজের ডেটা পরীক্ষা করার জন্য অ-তুচ্ছ করে তোলে ?!
সিএনটি

@ গ্রাহাম-পেরিন: ডেজসনলজ 4 আমার পক্ষে খুব ভাল কাজ করেছে। অনুরোধ অনুসারে এটি " jsonlz4 ফাইলগুলিকে এমন কিছুতে রূপান্তরিত করবে না যা আনলজ 4 পড়বে " তবে সরাসরি সেগুলি সঙ্কুচিত করে। এটি আরও দৃশ্যমান করার জন্য এটির আসল উত্তরটি দেওয়া ভাল হবে।
mivk

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, তবে এটি এখনও কার্যকর হয়নি। কিছু বাইট বনাম স্ট্রিং সম্পর্কিত ত্রুটি। এই স্ক্রিপ্টটি আমদানি পরিবর্তনের সাথে কাজ করেছে: gist.github.com/Tblue/62ff47bef7f894e92ed5
user31389

1
@ ব্যবহারকারী31389: আমি স্ক্রিপ্ট আপডেট করেছি। এটা কি এখন কাজ করে?
হ্যাকন এ। জর্জল্যান্ড

আমি না করা পর্যন্ত আমার পক্ষে কাজ করছিল না $ pip install lz4
ড্যানিয়েল

5

আসলে প্রায় সকল ফায়ারফক্স প্রোফাইল lz4 ফাইলই মোজলজ 4 ফাইল 4 এর অর্থ তাদের কাছে একই "ফাইল ফর্ম্যাট শিরোনাম" রয়েছে। একটি ফাইল বাদে। আমি webext.sc.lz4 ফাইল সম্পর্কে কথা বলি । এটা আছে mozJSSCLz40v001\0ফাইল হেডার এবং হয়তো কিছু scবাইট প্রবাহে ফাইল এর প্যাক গ্রুপে প্যাকেজিং।

Mozlz4 পাঠ্য ফাইল mozlz4- সম্পাদনা পড়তে বা সঙ্কলনের জন্য একটি ফায়ারফক্স অ্যাডন রয়েছে


4

এর জন্য পর্যাপ্তভাবে অবিচলিত গুগলিং অনেকগুলি সমাধান সক্রিয় করে, তবে তাদের বেশিরভাগই হয় (ক) অন্তর্নিহিত লাইব্রেরিগুলির পরবর্তী পরিবর্তনগুলি দ্বারা বিভক্ত হয়ে পড়েছে বা (খ) অহেতুক জটিল (কমপক্ষে আমার ব্যক্তিগত স্বাদে) জটিল হয়ে পড়েছে, যার ফলে এগুলি আঁকড়ে রয়েছে making বিদ্যমান কোড মধ্যে ড্রপ।

পাইথন LZ4 বাইন্ডিংয়ের সাম্প্রতিক সংস্করণটি ব্যবহার করে নিম্নলিখিতটি কমপক্ষে পাইথন ২.7 এবং ৩.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

অবশ্যই এটি ইনপুটগুলি (বা আউটপুট) বৈধ করার চেষ্টা করে না, ইত্যাদি সুরক্ষিত রাখার উদ্দেশ্যে নয়, তবে কেউ যদি কেবল নিজের এফএফ ডেটা পার্স করতে সক্ষম হতে চায় তবে এটি বেসিক কাজটি সম্পন্ন করে।

এখানে কমান্ড লাইন সংস্করণ , যা সম্পর্কিত ডিরেক্টরিতে সংরক্ষণ করা যেতে পারে এবং কমান্ড লাইন থেকে এইভাবে আহবান করা যেতে পারে:

chmod +x mozlz4.py
./mozlz4.py <file you want to read> <file to save output to>
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.