18 March 2001
Copyright (c) 2000-2001 Rob McMullen (

======== is a perl script that merges Netscape/Mozilla format
bookmark files.  I found that I was maintaining bookmarks at home and
at work, and they would continually diverge as I found cool links at
one site or the other.  This script merges two (or more) bookmark
files into one, trying to be smart about the ordering of the
bookmarks.  The resulting bookmark file is the union of all of the
bookmark files, where the structure is built from the master file.


Originally, I figured that someone had solved this problem already, so
I looked around for a program that would merge bookmark files.  There
are a few out there, including another project hosted on SourceForge:
Jeremy Buchmann's

His script worked well, but I liked keeping the ordering of my
bookmarks.  I don't alphabetize my bookmarks within a folder, I
usually order them by how often I hit the link.

Rather than modifying his script, I decided to write my own.  I felt
that this task would be an ideal use for object orientation and
recursive design.


* Merges two or more bookmark files into one master copy

* Preserves ordering of folders and of bookmarks within folders

* Attempts to insert new items in master bookmark file in the same
  relation as the bookmarks exist relative to the other bookmarks in
  the importing file

* Perl 5, object oriented design


* This script handles Netscape/Mozilla format bookmarks only.

* Aliased bookmarks are not handled.  All information about bookmark
  aliases are stripped out of the generated bookmark file.

* Bookmark descriptions are not handled.  They are silently ignored,
  and are left out of the generated bookmark file.

* Netscape doesn't seem to update the LAST_MODIFIED field of bookmarks
  if all you do is edit the name or location of the bookmark.  Not
  really a bug in bookmark-merge per se, but something to be aware of
  if you are expecting name changes in the importing bookmarks to be
  copied over to the master bookmark file.

* Mozilla bookmarks include ID tags on the folders, which the script
  mostly ignores.  The only ID tag that the script handles is the
  PersonalToolbarFolder keyword, which is recognized.  All other ID
  tags are left unchanged in the master bookmark file.

* The number of entries in the resulting bookmark file is always as
  large or larger than the number in the master bookmark file.  So far,
  there isn't any way to mark that an entry should be deleted.
  Instead, the model is to syncronize all bookmark files back out to
  all your machines after merging and deleting unwanted bookmarks from
  the single merged copy.


The script is run with the following command: [-o output] [-v] [-j date] master_file merging_file [other_files ...]

  -o output

    This is an optional parameter that names the new file to be
    created for the resulting new bookmarks.  If this parameter is not
    specified, the new bookmark file is sent to standard output.

  -j date_in_seconds_since_1970

    This is an optional parameter that speficies a date which all new
    items must be newer than in order to be merged.  The date is
    specified as a time_t value, that is, the time in seconds since
    Jan. 1, 1970.  This can be passed to the program using the
    backtick operator of the shell and the standard unix date command: -j `date --date="Jan 1 2000" +%s"` a.html b.html

    Thanks to Peter Westerstrom ( for
    this patch.


    Verbose flag.  This prints gargantuan amounts of information to
    STDERR as the script is processing the files.  Useful mostly for
    debugging, or for those interested in seeing how the script


    This is the main bookmark file that you want the other files to be
    merged into.  This is the baseline file; all bookmarks that are
    new in the other files are added to this file.  The basic
    structure of the new bookmark file is therefore taken from this

  merging_file [other_files ...]

    These files (one or more files) are the other bookmark files that
    are going to be merged into the master file.

==========, Copyright (c) 2000-2001 Rob McMullen ( comes with ABSOLUTELY NO WARRANTY; for details see
the file COPYING included in the source distribution, or see the web site for more information.

That means that I can't be held responsible for this program
overwriting your bookmark files, deleting your operating system, or
disrupting the earth's gravity field causing a meteorite impact crater
where your monitor used to be.  I use this program all the time, but
that doesn't mean that there isn't some potentially nasty bug lurking
somewhere.  I hope there isn't; I have done my best to test the
script.  However, this is provided for you to use at your own risk.
Make backup copies of any files before attempting to use this program.

I hope you enjoy this program, and that it saves you some time.

Have fun!