2013-05-21 2 views
0

У меня есть много html-файлов, которые живут в одной папке. Мне нужно преобразовать их в уценку. Я нашел пару драгоценных камней, которые делают это отлично по одному. мой вопрос ... Как я могу прокручивать каждый файл в папке и запускать команду для их преобразования в md в отдельной папке.пакетный конвертировать HTML в Markdown

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') 
+4

Это вопрос об итерации и циклах. Вы взглянули на то, что Ruby, встроенные в классы 'Dir' и' File', могли бы сделать для вас? Лучший ответ будет учитывать, как ваши файлы структурированы, а также любые возможные ограничения в ваших драгоценных камнях (назовите их, пожалуйста). Составьте вместе первую попытку в вашем вопросе, и мы будем рады! –

ответ

2

Dir.glob(directory) {|f| ... } будет перебрать все файлы внутри каталога. Например, используя библиотеку Redcarpet, вы можете сделать что-то вроде этого:

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 
Смежные вопросы