是否可以从现有配置文件重新生成 Firefox 的 Profiles.ini?

是否可以从现有配置文件重新生成 Firefox 的 Profiles.ini?

我最近不小心把 Ubuntu 中的主分区填满了。在我意识到发生了什么之前,我重新启动了 Firefox,因为它的行为很奇怪(这是可以理解的)。

现在,当我使用配置文件管理器(使用 -p)启动 Firefox 时,它不会列出任何现有的配置文件。我检查了一下,所有配置文件文件夹都还在,但我的 Profiles.ini 文件基本上是空的。我推测它是在分区已满时意外被清空的。

我尝试删除profiles.ini,但它只是重新生成为空。是否可以根据现有的配置文件文件夹重新生成我的profiles.ini,或者我是否必须手动重建它(mozilla 文档显示了格​​式,因此看起来不太难,我只是在寻找偷懒的选项)。

答案1

一些 Bash 爱好者;随便你叫什么名字。我使用了 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++;
}

相关内容