É possível regenerar profiles.ini do firefox a partir de perfis existentes?

4

Recentemente, acidentalmente preenchei minha partição home no Ubuntu. Antes de perceber o que aconteceu, reiniciei o Firefox porque ele estava agindo estranhamente (compreensivelmente).

Agora, quando inicio o firefox com o Gerenciador de perfis (usando -p), ele não lista nenhum dos meus perfis existentes. Eu verifiquei e todas as pastas de perfil ainda estão lá, mas o meu arquivo profiles.ini é basicamente vazio. Eu presumo que ficou em branco por acidente enquanto a partição estava cheia.

Eu tentei excluir o profiles.ini, mas ele só foi regenerado vazio. É possível regenerar o meu profiles.ini com base nas pastas de perfil existentes ou eu apenas terei que reconstruí-lo manualmente (os documentos do mozilla mostram o formato para que não pareça muito difícil de fazer, estou apenas procurando opção preguiçosa).

    
por Rob Van Dam 20.02.2010 / 07:04

2 respostas

4

Algum Bash-amor; nomeie o que você quiser. Eu usei o thescript.sh

#!/bin/bash

echo '[General]'
echo 'StartWithLastProfile=1'
echo ''

n=0

for file in * ; do
  if [ -d $file ] ; then
     if [[ "$file" =~ .+\.(.+) ]] ; then
        echo "[Profile${n}]"
        echo "Name=${BASH_REMATCH[1]}"
    echo "IsRelative=1"
    echo "Path=${file}"
    if [[ ${BASH_REMATCH[1]} == default ]] ; then
       echo "Default=1"
    fi
    echo ""
    let n++
     fi
  fi
done

Uso

Primeiro, coloque-o no diretório de perfis do mozilla (por exemplo, ~ / .mozilla / firefox para mim).

chmod +x thescript.sh
./thescript.sh
./thescript.sh > profiles.ini

Saída

nex@Computer:~/.mozilla/firefox
> ./thescript.sh 
[General]
StartWithLastProfile=1

[Profile0]
Name=default
IsRelative=1
Path=03k202kd.default
Default=1

[Profile1]
Name=test
IsRelative=1
Path=a023lkdl.test


nex@Computer:~/.mozilla/firefox
> ./thescript.sh > profiles.ini
    
por 20.02.2010 / 07:39
2

Não consigo encontrar nada de pesquisado, então escrevi um script perl:

#!/usr/bin/perl

use strict;
use warnings;

my $dir = glob($ARGV[0] || '~/.mozilla/firefox/');

chdir $dir or die "Unable to change to dir $dir: $!";
opendir my $dh, $dir or die "Unable to open dir $dir: $!";
my @dirs = grep { /^[^.]/ && -d $_ } readdir $dh;

# print some boilerplate
print <<'START';
[General]
StartWithLastProfile=0

START

# try to sort by oldest first (uses a schwartzian transform)
# the 'chrome' folder in each profile folder seems to be the oldest file per profile generally
@dirs = reverse
        map { $_->[0] }
        sort { $a->[1] <=> $b->[1] || $a->[0] cmp $b->[0] }
        map { [ $_, -C "$_/chrome" ] }
        grep { -e "$_/chrome" } @dirs;

my $i = 0;
foreach my $profile_dir (@dirs) {
    # folder names are usually of the form zyxwabc.My Profile Name
    my ($name) = $profile_dir =~ /^[^.]+\.(.*)/;
    next if ! $name;

    print <<"PROFILE";
[Profile$i]
Name=$name
IsRelative=1
Path=$profile_dir

PROFILE

    $i++;
}
    
por 20.02.2010 / 07:38