[script-bash] Backup firefox 57 ou superior [ versão 1.07 ]

Iniciado por swatquest, 24 de Novembro de 2017, 23:11

tópico anterior - próximo tópico

swatquest

Oi pessoal,
A partir do firefox57 várias extensões deixaram de funcionar. Um delas foi a FEBE ( https://addons.mozilla.org/pt-BR/firefox/addon/febe/ ), que fazia o backup de favoritos,extensões, tema e etc...

O que o script faz:
  -  comprimi o o perfil  completo (7zip)

-  necessário instalar o p7zip-full
sudo apt install p7zip-full

Organiza em pastas:
  -  salva os arquivos de instalação das extensões com seus nomes
  -  salva o favoritos e seus backups antigos (bookmarks.html)
  -  salva o arquivo completo prefs.js
  -  exporta do prefs.js as configuracões de temas ( usados) e páginas fixadas e sua quantidade (about:newtab )
  -  salva o arquivo completo favicons.sqlite
  -  cria um arquivo lista_extensões com as ids e nomes das extensões
  -  salva o  mecanismos de pesquisa
  -  salva a personalização da barra de ferramentas
  -  salva as senhas
  -  salva pastas de dados das extensões


Para o script funcionar você deve habilitar um opçào no firefox e executar o procedimento:
digite about:config na barra de endereços e localize a configuração abaixo

browser.bookmarks.autoExportHTML

Mude de false para true

Feche o firefox. Abra-o novamente e feche.
Pronto.

Esta opção faz o backup automático do favoritos toda vez que você fechar o firefox.

Feito isso salve o arquivo em uma pasta  ~/backup/firefox e dê a opção de executar para ele.

chmod +x firefox_backup.sh

firefox_backup.sh
#!/bin/bash
# Backup firefox 57 ou superior
# swatquest
# versão 1.07

# Verificando se o firefox está aberto
firefox=`whereis firefox | awk -F" " '{ print $3 }'`
firefox_exec=$(systemd-cgls /user.slice | grep -Fi "$firefox" | grep -vc "grep"
)
if [[ "$firefox_exec" != 0 ]]; then
printf "%s\n" "O firefox está aberto. É recomendado executar este script com firefox fechado."
   while read -p "Você quer fechar o firefox? [N/s]" RESPFIREFOX ; do
     if [[ $RESPFIREFOX = "" ]]; then
       RESPRANK="N"; exit 0;
     elif [[ $RESPFIREFOX = [Nn] ]]; then
       exit 0;
     elif [[ $RESPFIREFOX = [Ss] ]]; then
       killall firefox;
       sleep 3
       break
     fi
    done
fi
# Criar diretório e acessar
nome_dir=`date +'%F %H.%M.%S'`
mkdir -p "$nome_dir"
cd "$nome_dir"

# Copiar caminho do arquivo do perfil do firefox
perfil=`cat ~/.mozilla/firefox/profiles.ini | grep -i path| awk -F= '{print $2}'`

# Comprimir todo o perfil
printf "%s\n" "Comprimindo perfil completo"
mkdir -p "Perfil_completo"
7z a -t7z -m0=lzma2 -mx=9 -bsp2 -bso0 "Perfil_completo/$perfil.7z" ~/.mozilla/firefox/"$perfil"/

# Backup favoritos
printf "%s\n" "Backup favoritos"
mkdir -p "bookmark_automático"
cp ~/.mozilla/firefox/"$perfil"/bookmarks.html "bookmark_automático"
printf "%s\n" "Backup para pasta de favoritos antigos"
cp -r ~/.mozilla/firefox/"$perfil"/bookmarkbackups "bookmark_automático/bookmarkbackups"

# Backup favicons
printf "%s\n" "Backup favicons"
cp ~/.mozilla/firefox/"$perfil"/favicons.sqlite "favicons.sqlite"

# Backup dos mecanismos de pesquisa
searchpluginsfiles=`ls /usr/lib/firefox/distribution/searchplugins/common/| wc -l`
printf "%s\n" "Backup mecanismos_pesquisa"
if [[ "$searchpluginsfiles" != 0 ]]; then
mkdir -p "mecanismos_pesquisa/usr/lib/firefox/distribution/searchplugins/common"
cp /usr/lib/firefox/distribution/searchplugins/common/*  "mecanismos_pesquisa/usr/lib/firefox/distribution/searchplugins/common"
else
mkdir -p "mecanismos_pesquisa"
fi
cp ~/.mozilla/firefox/"$perfil"/search.json.mozlz4  "mecanismos_pesquisa/"

# Personalização da barra de ferramentas
printf "%s\n" "Backup personalização da barra de ferramentas"
mkdir -p "Barra de ferramentas"
cp ~/.mozilla/firefox/"$perfil"/xulstore.json "Barra de ferramentas"/

# Backup de senhas
printf "%s\n" "Backup senhas"
mkdir -p "Senhas"
[[ -e ~/.mozilla/firefox/"$perfil"/logins.json ]] &&
cp ~/.mozilla/firefox/"$perfil"/logins.json "Senhas"/
[[ -e ~/.mozilla/firefox/"$perfil"/key3.db ]] &&
cp ~/.mozilla/firefox/"$perfil"/key3.db "Senhas"/

# Backup arquivo de preferência do usuário prefs.js
mkdir -p "Preferência do usuário/Extraídos"
printf "%s\n" "Backup do arquivo de preferência do usuário"
cp ~/.mozilla/firefox/"$perfil"/prefs.js "Preferência do usuário"/

# Extraindo configurações do prefs.js
printf "%s\n" "Extraindo configurações de temas se existir no prefs.js"
grep -i "lightweightThemes.usedThemes" "Preferência do usuário"/prefs.js > "Preferência do usuário"/Extraídos/Temas
printf "%s\n" "Extraindo configurações de sites fixados se existir da página newtab no prefs.js"
grep -Ei 'browser.newtabpage.activity-stream.topSitesCount|browser.newtabpage.pinned' "Preferência do usuário"/prefs.js > "Preferência do usuário"/Extraídos/newtabpage_fixados

# Copiar arquivos de extensões xpi
dir=`pwd`
home_user=`grep $(whoami) /etc/passwd | awk -F : '{print $6}'`

if [[ -e  "$home_user/.mozilla/firefox/"$perfil"/extensions/" ]]; then
cp ~/.mozilla/firefox/"$perfil"/extensions/*.xpi "$dir"
fi

# Copiar arquivo extensions.json do firefox
cp ~/.mozilla/firefox/"$perfil"/extensions.json "$dir"

# Pega a lista de arquivos de extensões
printf "%s\n" "Backup dos arquivos de instalacão das extensões"
SAVEIFS=$IFS
IFS=$(echo -en "\n\b")
lista_ext=($(sed 's/:/\n/g' extensions.json | grep -Ei -A1 '"id"|"name"'| grep -vE '"id"|"name"'| awk -F, '{print $1}' | sed 's/\"//g'| grep -v "\--"))
conta=0
mkdir -p extensões
while [  $conta -lt "${#lista_ext[@]}" ]; do
if [[ -e "${lista_ext[$conta]}.xpi" ]]; then
  nome_antigo="${lista_ext[$conta]}.xpi"
  nome_novo="${lista_ext[$conta+1]}.xpi"
   if  [[ $nome_novo == *"/"* ]]; then
     mv "$nome_antigo" extensões
   else
     mv "$nome_antigo" "$nome_novo"
     mv "$nome_novo" extensões
   fi
  printf "%s\n%s\n\n" "id:$nome_antigo" "nome:$nome_novo">> lista_extensões
fi
   let conta=conta+1
done

# Pela lista de pasta das extensões instaladas
pastas() {
cd "$home_user/.mozilla/firefox/$perfil/browser-extension-data"
conta=0
while [  $conta -lt "${#lista_ext[@]}" ]; do
if [[ -d "${lista_ext[$conta]}" ]]; then
  pasta_rem="${lista_ext[$conta]}"
   printf "%s\n" "$pasta_rem"
fi
   let conta=conta+1
done
}
IFS=$SAVEIFS

# Copia as pastas de dados de extensões instaladas
lista_dir=($(pastas))
mkdir "extensões/browser-extension-data"
browser_extension_data="$home_user/.mozilla/firefox/$perfil/browser-extension-data"
printf "%s\n" "Backup das pastas de dados de extensões instaladas"
for i in "${lista_dir[@]}"; do
cp -r "$browser_extension_data/$i" "extensões/browser-extension-data"
done

# Apagar arquivos criados temporários
rm extensions.json

# Mensagem de contagem do backup
total_ext=`[[ -e lista_extensões ]] && grep -c "id:" lista_extensões || printf 0`
[[ -e lista_extensões ]] &&  sed -i "1s/^/[[ Foi feito o backup de $total_ext extensões ]]\n\n/" lista_extensões
printf "%s\n" "Fim do backup: salvo na pasta $dir"
exit 0


Testado no Ubuntu e Arch.
Tem uma pergunta ao tentar executá-lo com firefox aberto

Você quer fechar o firefox? [N/s]
O padrão é N ( Não)



swatquest

atualizado

versão 1.05

-  conserto no caminho da pasta do usuário na home
-  adicionado o perfil completo comprimido
- removido o resumo final de contagem do backup

organizado por pastas
- backup dos mecanismos de pesquisa
- personalização da barra de ferramentas
- backup de senhas

swatquest

versão 1.06

- um conserto para verificar se os arquivos de senha existem

swatquest

versào 1.07
- removido variáveis passo,passo1,passp2,passo3
- adicionado backup das pastas de dados da extensòes instaladas