After using Typo for some time now, I wanted a raw backup of my many posts. So I used some Ruby to extract of that information. First I wanted a raw text file of my content.
$ script/runner -e production "Content.find(:all, :conditions => 'type = \"Article\"'). \
each {|i| puts '##########'; puts i.title; puts ''; puts i.body; puts '' }" >> ~/ta-text.txt
Next I needed some script to convert this to a separate text file fore each post. I reused a bit from my GTD and iPod Notes post. This script will take the output from the above command and create a ‘txt’ file for each post. I have stripped out the header comments for here but you can find the original version here
#!/usr/bin/env ruby
###############################################################################
# COPYRIGHT 2006 Eric Davis ("eric" + "at.to_sym" + "theadmin.org")
###############################################################################
if ARGV.length < 1
puts "You must enter the name of the file to split"
exit
end
require 'fileutils'
# Make a folder split
FileUtils.mkdir_p 'split'
FileUtils.cd 'split'
# Read the todo from the origonal folder
file = IO.readlines("../#{ARGV[0]}")
# Use a tmp variable so I can skip the first close
first_run = true
# Use this to track if a new file is needed
new_file = false
f = String.new
posts = 0
file.each do |line|
if line =~ /^[#]{10,10}$/
f.close if not :first_run
new_file = true
else
if new_file == true
posts += 1
new_file_name = line.strip.gsub(/ /, '_').gsub(/\//, '-').downcase + '.txt'
f = File.new(new_file_name, "w")
first_run = false
new_file = false
end
f.puts line
end
end
f.close
puts "Converted #{posts} posts"
Now all you have to do is save that file somewhere as typo-split.rb and run ruby typo-split.rb output.txt and out will pop your posts.
Enjoy!
Eric Davis