Komut satırını kullanarak jsonlz4 dosyalarını (Firefox yer imi yedeklemeleri) nasıl açabilirsiniz?


Yanıtlar:


18

Jsonlz4 paketini kullanarak lz4jsonşunları yapabildim :

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

1
Andikleen çözeltisi aynı zamanda .json.mozlz4örneğin github.com/andikleen/lz4json/issues/1#issuecomment-336729026 ( örn. Kendine not: Unutmayın, hatırlayın, gmakeFreeBSD… hakkında not edin) gibi dosyalar için de iyidir .
Graham Perrin

3
Ayrıca: Mozilla böcek 1209390 altında bugzilla.mozilla.org/show_bug.cgi?id=1209390#c4 (2016-05-13) - Standart olmayan jsonlz4 / mozlz4 yerine standart lz4 dosya biçimini kullanın - avih / dejsonlz4: Sıkıştırma Mozilla Firefox yer imleri yedekleme dosyaları
Graham Perrin

1
FWIW, andikleen'in aracı "LZ4_decompress_safe_partial" için tanımsız referans "hatasıyla derlenemedi liblz4-dev inşa etmeden önce . avih'in aracı OTOH, benim için mükemmel çalıştı.
Waldyrious

1
Bir açık web kuruluşunun, kullanıcı verileri için özel bir sıkıştırma formatı kullanması ve kendi verilerinizi incelemeyi önemsiz hale getirmesi ironik değil mi ?!
04

@ Graham-Perrin: dejsonlz4 benim için çok iyi çalıştı. İstenildiği gibi " jsonlz4 dosyalarını unlz4'ün okuyacağı bir şeye dönüştürmez ", ancak doğrudan bunları açar . Daha görünür hale getirmek için gerçek bir cevap vermek iyi olurdu.
mivk

17

Bu betiği bir dosyaya kaydedin, örneğin 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)

Ben değiştirmek zorunda import lz4için import lz4.block as lz4, ama yine de işi yoktu. Bazı baytlar dize ile ilgili hata. OTOH bu senaryo içe aktarma değişikliği ile çalıştı: gist.github.com/Tblue/62ff47bef7f894e92ed5
user31389

1
@ user31389: Ben komut dosyasını güncelledik. Şu anda çalışıyor mu?
Håkon A. Hjortland

Yapana kadar benim için çalışmıyordu $ pip install lz4.
Daniel,

5

Aslında hemen hemen tüm Firefox profil lz4 dosyaları mozlz4 dosyalarıdır. Aynı "dosya formatı üstbilgisine" sahip oldukları anlamına gelir. Bir dosya dışında. Webext.sc.lz4 dosyası hakkında konuşurum . Bu sahiptir mozJSSCLz40v001\0dosya başlığını ve belki bazı scbayt akışında dosyaların paket grubuna ambalajı.

Mozlz4-edit .mozlz4 metin dosyalarını okumak veya sıkıştırmak için bir Firefox eklentisi var


4

Bunun için yeterince ısrarcı Googling bunun için pek çok çözüm getirir, ancak bunların çoğu (a) altta yatan kütüphanelerde yapılan değişiklikler sonucu kırılmış veya (b) gereksiz yere karmaşık (en azından kişisel zevklerime göre), mevcut koda bırak.

Aşağıdakiler, Python LZ4 ciltlemelerinin en son sürümünü kullanarak, en azından Python 2.7 ve 3.6'da çalışıyor gibi görünmektedir :

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

Elbette bu, girişleri (veya çıkışları) doğrulamaya teşebbüs etmez, güvenli olma amacı gütmez, vb.

Buradaki komut satırı sürümü , ilgili dizine kaydedilebilir ve komut satırından şu şekilde çağrılabilir:

chmod +x mozlz4.py
./mozlz4.py <file you want to read> <file to save output to>
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.