Jose Rivas
Jose Rivas

Reputation: 69

batch convert HTML to Markdown

I have a whole lot of html files that live in one folder. I need to convert these to markdown I found a couple gems out there that does this great one by one. my question is... How can I loop though each file in the folder and run the command to convert these to md on a separate folder.

UPDATE

#!/usr/bin/ruby

root = 'C:/Doc'
inDir =  File.join(root, '/input')
outDir =  File.join(root, '/output')
extension = nil
fileName = nil

Dir.foreach(inDir) do |file|
 # Dir.foreach will always show current and parent directories
 if file == '.' or item == '..' then
  next
 end

 # makes sure the current iteration is not a sub directory
 if not File.directory?(file) then
  extension = File.extname(file)
  fileName = File.basename(file, extension)
 end

 # strips off the last string if it contains a period
 if fileName[fileName.length - 1] == "." then
  fileName = fileName[0..-1]
 end

 # this is where I got stuck
 reverse_markdown File.join(inDir, fileName, '.html') > File.join(outDir, fileName, '.md')

Upvotes: 0

Views: 1114

Answers (1)

Patrick Oscity
Patrick Oscity

Reputation: 54694

Dir.glob(directory) {|f| ... } will loop through all files inside a directory. For example using the Redcarpet library you could do something like this:

require 'redcarpet'

markdown = Redcarpet::Markdown.new(Redcarpet::Render::HTML, :autolink => true)

Dir.glob('*.md') do |in_filename|
  out_filename = File.join(File.dirname(in_filename), "#{File.basename(in_filename,'.*')}.html")
  File.open(in_filename, 'r') do |in_file|
    File.open(out_filename, 'w') do |out_file|
      out_file.write markdown.render(in_file.read)
    end
  end
end

Upvotes: 3

Related Questions