4

Недавно я случайно заполнил свой домашний раздел в Ubuntu. Прежде чем я понял, что произошло, я перезапустил Firefox, потому что он действовал странно (понятно).

Теперь, когда я запускаю Firefox с помощью диспетчера профилей (используя -p), он не отображает ни одного из моих существующих профилей. Я проверил, и все папки профиля все еще там, но мой файл profiles.ini в основном пуст. Я полагаю, что он был заблокирован случайно, когда раздел был заполнен.

Я попытался удалить файл profiles.ini, но он просто становится пустым. Можно ли восстановить мои profiles.ini на основе существующих папок профиля, или мне просто нужно будет восстановить его вручную (документы mozilla показывают формат, чтобы его не было слишком сложно сделать, я просто ищу ленивый вариант).

2 ответа2

4

Некоторая любовь к Баш; Назовите это как хотите. Я использовал 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

использование

Во-первых, поместите его в каталог профилей Mozilla (например, ~/.mozilla/firefox для меня).

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

Выход

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
2

Я не могу найти что-то в поиске, поэтому я написал 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++;
}

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .