Como mostrar lista de extensões instaladas para o firefox via linha de comando?

6

Qual é a linha de comando para mostrar a lista de todas as extensões instaladas no navegador do Firefox? Existe algum. Eu verifiquei man firefox , mas não ajudou.

    
por Mohammad Reza Rezwani 20.06.2014 / 08:15

3 respostas

13

Dê uma chance a este comando grep oneliner para listar todos os addons do firefox,

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

OR

Isso funcionou para mim:

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

Saída no meu caso:

Clean Links
Tee-Timer

Explicação :

  • cat ~/.mozilla/firefox/*.default/addons.json : lê o arquivo addons.json em cada perfil.
  • python -c 'import json,sys;obj=json.load(sys.stdin); carrega a biblioteca do analisador json do python e carrega o json via stdin (entrada padrão), ergo de cat
  • for (i, x) in enumerate(obj["addons"]): phyton codifica para percorrer a matriz de addons ...
  • print x["name"]' | uniq ... e imprima seu nome apenas um.
por chaos 20.06.2014 / 09:01
8

Esta é basicamente uma versão simplificada da abordagem do @ chaos:

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

Não há motivo para obter o nome do usuário. Você pode usar apenas ~/ ou $HOME para obter o diretório pessoal. O nome do perfil padrão é, da mesma forma, desnecessário. Você provavelmente só tem um e seu nome será RandomString.default . Se você tiver mais de um e diferentes addons para cada um, essa abordagem listará todos deles. Então, se você fizer tiver vários perfis, talvez queira adicionar | uniq ao comando acima para remover duplicatas.

Explicação

  • grep -oP : o -o faz com que grep imprima apenas a parte correspondente da linha e o -P ativa as Expressões regulares compatíveis com Perl, que são necessárias para o \K (veja abaixo).
  • },"name":"\K[^"]* : corresponde ao trecho mais longo de caracteres que não são " ( [^"]* ) que aparecem logo após },"name": . O \K significa "ignorar tudo correspondido até aqui", o que, quando combinado com -o , fará com que apenas a parte da correspondência depois que o name:":" seja impresso.
  • ~/ : este é o seu diretório inicial.
por terdon 20.06.2014 / 11:35
1

O seguinte scriptlet é apenas uma versão mais completa do código do @ chaos . Minhas motivações foram

  • eu uso mais de um perfil do Firefox.
  • Eu coloquei meus perfis do Firefox em uma pasta / diretório diferente do padrão: consulte FIREFOX_PROFILE_ROOT no script / let, que você provavelmente deve editar (de volta ao padrão) ou use o código mais recente profiles.ini -parsing ( veja o link abaixo).
  • Eu queria ver mais informações sobre meus complementos, pois estava com um problema que se mostrou relacionado à versão de extensão.
  • Eu não codifiquei por alguns dias :-)

Você também pode {ver a versão mais recente deste código, usar a versão mais recente como um arquivo de script para download} aqui . Observe que o código mais recente também analisa profiles.ini (usando os caminhos de perfil que você define lá) em vez de depender (como abaixo) de informar ao código onde encontrar seus perfis.

### 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
    
por TomRoche 30.08.2017 / 17:44