web-dev-qa-db-ja.com

コマンドライン経由でFirefox用にインストールされた拡張機能のリストを表示するには?

Firefoxブラウザーにインストールされているすべての拡張機能のリストを表示するコマンドラインとは何ですか?ありますか。 man firefoxをチェックしましたが、助けにはなりませんでした。

このgrep onelinerコマンドを試して、すべての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からergoをロードします
  • for (i, x) in enumerate(obj["addons"]):アドオンの配列をループするフィトンコード...
  • print x["name"]' | uniq ...そしてその名前を1つだけ出力します。
13
chaos

これは基本的に@chaosのアプローチの単純化されたバージョンです。

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

ユーザーの名前を取得する理由はありません。~/または$HOMEを使用していつでもホームディレクトリを取得できます。同様に、デフォルトプロファイルの名前は不要です。おそらく1つしかなく、その名前はRandomString.defaultになります。複数のアドオンがあり、それぞれに異なるアドオンがある場合、このアプローチではallがリストされます。そのため、doに複数のプロファイルがある場合、上記のコマンドに| uniqを追加して重複を削除することができます。

説明

  • grep -oP-oによりgrepは行の一致部分のみを印刷し、-P\Kに必要なPerl互換正規表現をアクティブにします(下記参照)。
  • },"name":"\K[^"]*"の直後にある最長の非[^"]*文字(},"name":)のストレッチに一致します。 \Kは「ここまで一致するものをすべて無視する」ことを意味し、-oと組み合わせると、name:":"の後の一致部分のみが出力されます。
  • ~/:これはホームディレクトリです。
8
terdon

次のスクリプトレットは、より機能的なバージョンの @ chaosのコード です。私の動機は

  • 複数のFirefoxプロファイルを使用しています。
  • Firefoxプロファイルをデフォルトとは異なるディレクトリ/フォルダーに配置します。スクリプト/レットのFIREFOX_PROFILE_ROOTを参照してください。おそらく編集(デフォルトに戻す)するか、新しいprofiles.ini-解析コードを使用してください。 (以下のリンクを参照)。
  • 拡張バージョンに関連することが判明した問題を抱えていたため、アドオンに関する詳細情報を確認したかったのです。
  • 数日間コーディングしていなかった:-)

また、{このコードの最新バージョンを参照し、最新バージョンをダウンロード可能なスクリプトファイルとして使用することもできます} here 。新しいコードは、プロファイルを検索する場所をコードに指示することに依存するのではなく(下で説明するように)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
1
TomRoche