Firefox Bookmark Backups konvertieren

Manchmal ist es notwendig, die Bookmarks eines alten Firefox-Profil in ein neues Profil zu übernehmen. Schlecht, wenn man dann nur noch die Sicherungsdateien hat, die als JSON abgespeichert werden. Importiert man diese mit Firefox, werden alle anderen Lesezeichen überschrieben. Das ist ärgerlich und überhaupt nicht elegant. Ein Backup der Lesezeichen in einen Ordner zu kopieren, ist aber im Firefox nun mal nicht vorgesehen.

Da ich genau dieses Problem hatte, habe ich ein kleines Perl-Script geschrieben, das die eine JSON-Datei einliest und diese in der HTML-Bookmark-Format ausgibt. Es benötigt lediglich JSON::XS und erzeugt nur eine Untermenge der möglichen Informationen, die im HTML-Bookmark-Format möglich wären.

Für alle Neugierigen ist hier der Source Code:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
# !/usr/bin/perl -w
 
use strict;
use warnings;
 
use JSON::XS;
 
open(FILE, "bookmarks.txt") or die "Couldn't open file: $!";
my $content = <FILE>;
close(FILE);
 
my $decoded = JSON::XS->new->decode($content);
 
printHeader();
workChildren($decoded);
 
sub workChildren {
my $element = shift;
if($#{$element->{'children'}} > 0) {
if ($element->{'title'} eq '') {
$element->{'title'} = "Importiert";
}
print "<DT><H3 ADD\_DATE=\"$element->{'dateAdded'}\" LAST\_MODIFIED=\"$element->{'lastModified'}\">$element->{'title'}</H3>\n";
print "<DL><p>\n";
for my $child (@{$element->{'children'}}) {
workChildren($child);
}
print "</DL><p>\n";
} else {
print "<DT><A HREF=\"$element->{'uri'}\" ADD\_DATE=\"$element->{'dateAdded'}\" LAST\_MODIFIED=\"$element->{'lastModified'}\">$element->{'title'}</A>\n";
}
}
 
sub printHeader {
print "<!DOCTYPE NETSCAPE-Bookmark-file-1>"
. "<!-- This is an automatically generated file."

. "     It will be read and overwritten."

. "     DO NOT EDIT! -->"
. "<META HTTP-EQUIV=\"Content-Type\" CONTENT=\"text/html; charset=UTF-8\">"
. "<TITLE>Bookmarks</TITLE>"
. "<H1>Lesezeichen-Import</H1>";
}