如何使用命令行解压 jsonlz4 文件(Firefox 书签备份)?

l0b*_*0b0 30 compression firefox json lz4

似乎有各种 JavaScript + 浏览器特定的解压缩方法,但是没有某种方法可以将 jsonlz4 文件转换为unlz4可以读取的内容吗?

小智 23

我能够使用lz4json以下方法解压 jsonlz4 :

apt-get install liblz4-dev
git clone https://github.com/andikleen/lz4json.git
cd lz4json
make
./lz4jsoncat ~/.mozilla/firefox/*/bookmarkbackups/*.jsonlz4
Run Code Online (Sandbox Code Playgroud)

  • 另外:https://bugzilla.mozilla.org/show_bug.cgi?id=1209390#c4 (2016-05-13) 在 Mozilla 下 bug _1209390 - 使用标准的 lz4 文件格式而不是非标准的 jsonlz4/mozlz4_ 提请注意[avih/dejsonlz4:解压 Mozilla Firefox 书签备份文件](https://github.com/avih/dejsonlz4) (3认同)
  • 一个开放的网络组织对用户的数据使用专有的压缩格式,这使得检查自己的数据变得非常重要,这不是很讽刺吗?! (2认同)

小智 23

将此脚本保存在文件中,例如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)
Run Code Online (Sandbox Code Playgroud)

  • 在我执行“$ pip install lz4”之前,它对我不起作用。 (2认同)

小智 9

足够持久的谷歌搜索找到了很多解决方案,但其中大多数似乎要么(a)被底层库的后续更改破坏,要么(b)不必要的复杂(至少对我个人而言),使它们笨拙放入现有代码。

以下似乎至少在 Python 2.7 和 3.6 上使用最新版本的Python 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
Run Code Online (Sandbox Code Playgroud)

当然,这并不试图验证输入(或输出),也不是为了安全等,但如果只想解析自己的 FF 数据,它就完成了基本工作。

此处的命令行版本,可以保存在相关目录中,并从命令行调用为:

chmod +x mozlz4.py
./mozlz4.py <file you want to read> <file to save output to>
Run Code Online (Sandbox Code Playgroud)


miv*_*ivk 9

现在,Linux 和 Windows 都有更简单的解决方案,可以使用命令行程序来解压缩这些烦人的.jsonlz4文件.mozlz4

对于Debian/Ubuntu,现在有lz4json软件包

sudo apt install lz4 lz4json
Run Code Online (Sandbox Code Playgroud)

它提供lz4jsoncat

姓名

lz4jsoncat - mozilla lz4json 格式的解压缩工具

概要

lz4jsoncat somefile.mozlz4 > somefile.json

描述

lz4jsoncat 可以解压 Firefox 书签备份和会话恢复生成的 lz4json 文件。数据转储到标准输出。

对于Windows(或 Linux),还有mozlz4发布页面上有可用的二进制文件。


小智 5

实际上几乎所有的 Firefox 配置文件lz4文件都是mozlz4文件。这意味着它们具有相同的“文件格式标题”。除了一个文件。我说的是webext.sc.lz4文件。它有mozJSSCLz40v001\0文件头,可能还有一些sc包装来将一组文件打包到字节流中。

有一个 Firefox 插件可以读取或压缩.mozlz4文本文件mozlz4-edit