如何通过命令行显示 Firefox 已安装扩展列表?

如何通过命令行显示 Firefox 已安装扩展列表?

哪个命令行可以显示 Firefox 浏览器上所有已安装扩展的列表?有吗?我检查过了,man firefox但没用。

答案1

尝试使用这个grep一行命令列出所有 Firefox 附加组件,

grep -oP '(?<=\},\"name\":\")([^"]*)' ~/.mozilla/firefox/*.default/addons.json

或者

这对我有用:

user@host:~$ cat ~/.mozilla/firefox/*.default/addons.json |
python -c 'import json,sys;obj=json.load(sys.stdin);
for (i, x) in enumerate(obj["addons"]):
  print x["name"]' | uniq

就我而言,输出:

Clean Links
Tee-Timer

解释

  • cat ~/.mozilla/firefox/*.default/addons.json:读取每个配置文件中的 addons.json 文件。
  • python -c 'import json,sys;obj=json.load(sys.stdin);加载 python 的 json 解析器库并通过 stdin (标准输入)加载 json,因此从cat
  • for (i, x) in enumerate(obj["addons"]):phyton 代码循环遍历附加组件数组......
  • print x["name"]' | uniq...并且只打印一个其名称。

答案2

这基本上只是@chaos 方法的简化版本:

grep -oP '},"name":"\K[^"]*' ~/.mozilla/firefox/*.default/addons.json

没有必要获取用户的名称,您始终可以使用~/$HOME获取主目录。同样,默认配置文件的名称也是不需要的。您可能只有一个,其名称将是RandomString.default。如果您有多个,并且每个都有不同的附加组件,则此方法将列出全部的。所以,如果你有多个配置文件,您可能需要添加| uniq到上述命令以删除重复项。

解释

  • grep -oP-o导致grep仅打印行的匹配部分,并且-P激活所需的 Perl 兼容正则表达式\K(见下文)。
  • },"name":"\K[^"]*:匹配紧随其后的最长的非"字符 ( ) 。表示“忽略到此处为止的所有内容”,与 结合使用时,将仅打印匹配内容在 之后的部分。[^"]*},"name":\K-oname:":"
  • ~/:这是您的主目录。

答案3

以下脚本只是@chaos 的代码.我的动机是

  • 我使用多个 Firefox 配置文件。
  • 我将我的 Firefox 配置文件放在与默认值不同的目录/文件夹中:请参阅FIREFOX_PROFILE_ROOTscript/let,您可能应该对其进行编辑(恢复为默认值),或者使用较新的profiles.ini-parsing 代码(请参阅下面的链接)。
  • 我想查看有关我的附加组件的更多信息,因为我遇到了与扩展版本相关的问题。
  • 我只是几天没写代码了:-)

您还可以{查看此代码的最新版本,使用最新版本作为可下载的脚本文件}这里。请注意,较新的代码也会进行解析profiles.ini(使用您在那里定义的配置文件路径),而不是依赖(如下所示)您告诉代码在哪里找到您的配置文件。

### List add-ons in all local Firefox profiles. Requires:

### * users to know where they keep their Firefox profiles. TODO: parse `profiles.ini`
### * python (to parse the add-ons JSON)

### Tested on Linux with Python versions={2.7.9, 3.4.2}.

### Copyright (C) 2017 Tom Roche <[email protected]>
### This work is licensed under the Creative Commons Attribution 4.0 International License.
### To view a copy of this license, visit http://creativecommons.org/licenses/by/4.0/

#FIREFOX_PROFILE_ROOT="${HOME}/.mozilla/firefox"  # default Firefox path, which ...
FIREFOX_PROFILE_ROOT="${HOME}/firefox"           # ... I override, but you probably should not!
FIREFOX_ADDONS_FILENAME='addons.json'            # default Firefox value
FIREFOX_ADDONS_FP_LIST=''                        # default empty

### find add-ons JSON files:

if  [[ ! -r "${FIREFOX_PROFILE_ROOT}" ]] ; then
    >&2 echo "ERROR: cannot read FIREFOX_PROFILE_ROOT='${FIREFOX_PROFILE_ROOT}', exiting ..."
else

    FIREFOX_ADDONS_FP_LIST="$(find "${FIREFOX_PROFILE_ROOT}/" -type f -name "${FIREFOX_ADDONS_FILENAME}" | fgrep -ve 'blocklists')"
#    echo -e "FIREFOX_ADDONS_FP_LIST=\n${FIREFOX_ADDONS_FP_LIST}" # debugging


    if   [[ ( -z "${FIREFOX_ADDONS_FP_LIST}" ) ||
            ( "$(echo ${FIREFOX_ADDONS_FP_LIST} | wc -l)" == '0' ) ]] ; then
        >&2 echo "ERROR: found no add-ons files in Firefox profiles under '${FIREFOX_PROFILE_ROOT}', exiting ..."
    else

        for FIREFOX_ADDONS_FP in ${FIREFOX_ADDONS_FP_LIST} ; do
            echo "${FIREFOX_ADDONS_FP} contains:"
            ### Parse add-ons file using python, so
            ### * gotta export the envvar
            export FIREFOX_ADDONS_FP
            ### * indenting becomes important

            python -c '
import json, os
with open(os.environ.get("FIREFOX_ADDONS_FP")) as addons_file:
    addons_data = json.load(addons_file)
    for (i, addon) in enumerate(addons_data["addons"]):
        print("add-on name=" + addon["name"])
        print("    version=" + addon["version"])
        print("        URI=" + addon["learnmoreURL"])
        print("") # newline
'

            echo # newline
        done
    fi
fi

答案4

jq是处理 JSON 数据的更简单的方法。

jq是一个轻量级且灵活的命令行 JSON 处理器。

jq -j '.addons [] | ( .type, ",", .defaultLocale.name, ",", .active, "\n" )' ~/.mozilla/firefox/*.default-*/extensions.json | sort -u

addons.json不包含“活动”标志(如果它被启用/禁用)。

它们也被列在 上about:support

我仍然想过滤更多内容,只过滤活动扩展名及其 sourceURI,而不过滤搜索网站mozilla.org那些(可能 OP 想要的)。

来源有关的

相关内容