GNU Songanizer

 [Listening Gnu by the Nevrax Design Team]


GNU Songanizer is a shell script to organize a directory containing a collection of MP3 files. The goal is to create virtual directory structures, which give different views of the data, but without having redundant copies of the files themselves.

The files are organized according to information gathered from the tags of files stored in subdirectories located under the 'base' directory, which bear the prefix _data in their name. Parallel virtual directory structures containing symbolic links to the actual files are created, which give different views of the same data. Each virtual directory stucture gives a view based on a particular attribute specified by the user. The _data directories themselves can be symbolic links to directories on other devices, and can have multiple levels of sub-directories within them holding the actual song files.

After songanization, the BASE directory contains the following directories:
(i) _data* --> All directories starting with _data contain the real data.
(ii) _artist --> Contains the link structure on the basis of the artist tag.
(iii) _genre --> Contains the link structure on the basis of the genre tag.
(iv) _initial --> Contains the link structure on the basis of the initial.
... and more, depending on the switches passed to the script.


Since GNU Songanizer is a shell script, a running shell is the first and foremost requirement. Preferably it should be a Bourne Again SHell. You may report problems encountered on any shell to us.

Getopt (enhanced) is needed to extract the options from the command line arguments. Alongwith that you should have gettext for internationalization support.

The mp3info tool should be installed in the system to process the file tags.


1.0held backAdded Autoconf/Automake support.
The documentation was given a revamp. A lot of redundancies were resolved in the process.
Fixed a bug caused by the mv command's inability to overwrite pre-existing tag directories.
Changed the symbolic links from being absolute to relative.
Changed the --initials switch back to --initial.
Enhanced the error handling and reporting facilities.
Added the flags --follow (default) and --no-follow to decide whether to follow symbolic links in the BASE/_data directory.
Extended the casesensitive flag to the other tags as well.
Fixed a bug that caused the script to terminate when the BASE directory had a space in its path.
Added the $SECONDS variable to log the amount of time taken to songanize.
Updated the copyright notices, keeping in view the impending assignment of copyright to Free Software Foundation, Inc.
0.82005-11-05Changed the virtual directory structure creation algorithm. The structure for every option passed to songanizer is first created in a temporary directory. On completion of this heavy task, in a short operation, the structure is moved to its desired location.
Added the --all switch.
Changed the --initial switch to --initials.
Replaced ls with find. Data directories can have multiple levels of subdirectoies within them.
Now links point to individual files instead of directories.
Created an online manual page.
0.72004-02-01gettext support for i18n was added.
0.62004-01-24Added long options support.
0.52003-08-22Fixed problems caused by an album occurring in more than one data directory.
0.42003-08-17Added support for multiple data directories.
0.32003-07-16Initial build.
Translated all texts into english.
0.22002-12-10Created generic function organizeOnBaseOfTag().
0.12002-11-01Started the project.

Mailing Lists

GNU Songanizer now has two mailing lists: <> and <>.

The main discussion list is <>, and is used to discuss all aspects of GNU Songanizer, including development and porting.

Announcements about GNU Songanizer and most other GNU Software are made on <>.

There is also a special list used for reporting bugs, <>.

To subscribe to any GNU Songanizer mailing list, please send an empty mail with a Subject: header line of just "subscribe" to the relevant -request list. For example, to subscribe yourself to the main list, you would send mail to <> with no body and a Subject: header line of just "subscribe".


June 2003Patrick OhneweinAuthorStarted the project. Wrote the initial version of most of the files.
August 2003Benjamin GuflerContributorHelped with the ID3 tags.
July 2004Juergen KoflerContributorWrote a Python implementation.
September 2005Debarshi RayMaintainerDay to day maintenance of the project. Primarily responsible for most of the releases after version 0.7.


There have been a lot of people who have contributed towards the development of the project in ways other than contribution of code/text. The authors would like to acknowledge the work done by these group of good samaritans. They include the GNU Project and The Savannah Project for making the development of free software, and particularly GNU Songanizer possible; the authors and maintainers of the mp3info utility Ricardo Cerqueira, and Cedric Tefft for making the job of reading the ID3 tags easy for us; and Massimo Bassi for his help regarding 'long options support'.

A special note of thanks is due to Lokesh Nyati for helping with the development of the project home page; Arjun Shankar and Rakesh Pandit for intelligent bug reports; and Alfred M. Szimdt for his extensive ideas about SongFS.

Apart from that we are grateful to all those who have given GNU Songanizer a try, and given valuable feedback in the form of bug reports and other suggestions.

About GNU Songanizer

Mailing lists


Mirror sites


To do


Bug database