I've been trying to get my music from apple music into mp3s and get all my very old unordered mp3s sorted out. One question I wanted to find out was what years my music library covered.
I've got another post about how I listen to music over at Music Setup - MPD, NCMPCPP, MPDScribble, Last.fm.
I used a combination of exiftool, grep ruby scripting, and Numbers.app.
The raw data looks like this (the empty line is missing data):
...
2006-07-03
======== /Users/useruser/music-2/Protomen, The/[2005] The Protomen/06 The Stand (Man Or Machine).mp3
2006-07-03
======== /Users/useruser/music-2/Mozart/Requiem - Chœur des Marais/CDM-Requiem_Mozart-05-Rex tremendae.mp3
======== /Users/useruser/music-2/Mozart/Requiem - Chœur des Marais/CDM-Walter-Ave Maria.mp3
2000
...
So to get all the data into a file I could script against (in ruby) I ran the following commands against my current music directory:
exiftool -r -s -s -s -year -RecordingTime -ext mp3 ~/music-2 | grep --invert-match '=====' > ~/music-years.txt
music-years.txt ends up looking like this (the empty line is missing data):
...
2006-07-03
2006-07-03
2000
...
I wrote a small ruby script to count all that data (because I'm not good enough at shell scripting to pull it off there) and spit it out as CSV:
year_lines = File.readlines("/Users/useruser/music-years.txt")
year_buckets = Hash.new(0)
(1950..2024).each do |year|
year_buckets[year] = 0
end
year_lines.each do |year_line|
match = /(19|20)\d{2}/.match(year_line)
if match
year = match[0].to_i
year_buckets[year] = year_buckets[year] + 1
else
year_buckets[-1] = year_buckets[-1] + 1
end
end
puts "Year,Count"
year_buckets.keys.sort.each do |year|
puts "#{year},#{year_buckets[year]}"
end
It looks a little weird in the regex because I had some music with dates of 1045 which… I probably don't have any music that old in my mp3 library. And I bucketed all those anomolies (there were only 3 or 4) and all the unknowns into a -1 bucket for easy analysis.
Anyway, I finally end up with a big list of counts of my songs that have a year or recording time tag for that year looks like this:
Year,Count
-1,1473
...
2001,177
2002,250
2003,182
2004,355
2005,542
2006,1027
2007,319
2008,235
2009,434
2010,642
...
So I dropped that into numbers and graphed it linearly and logarithmetically.

Here is a collection of general information I used to figure this out: