Home / Programmazione / Ruby / Creare file ZIP in Ruby
Mattepuffo

Creare file ZIP in Ruby

Creare file ZIP in Ruby

Leggendo in giro, ho visto che ci sono vari modi per creare file ZIP in Ruby.

Noi useremo il modulo rubyzip!

Quindi prima di tutto dobbiamo installarlo:

$ gem install rubyzip

A questo punto creiamo una classe per creare il file ZIP di una intera directory.

L'unico metodo presente richiede due parametri:

  • la directory da zippare
  • il nome del file

Ecco la classe:

require 'zip'

class CreateZip
 
  def compress(path, name)
    path.sub!(%r[/$],'')
    archive = File.join(path, name) + '.zip'
    FileUtils.rm archive, :force=>true
    Zip::File.open(archive, 'w') do |zipfile|
      Dir["#{path}/**/**"].reject{|f|f==archive}.each do |file|
        zipfile.add(file.sub(path+'/',''),file)
      end
    end
  end
 
end

Per richiamare questa classe da un altro file:

require 'CreateZip'

if __FILE__ == $0
  zip = CreateZip.new
  t = Time.new
  day = t.year.to_s + "_" + t.month.to_s + "_" + t.day.to_s
  zip.compress("/dir/to/zip", "backup_" + day)
end

Il nome del file è composto da una parte fissa più il giorno odierno.

Ovviamente questo è semplice esempio di partenza; ci sarebbero alcune da migliorare.

Ad esempio, questo programma può avere un solo file di backup al giorno, in quanto non tiene conto dell'orario, e un file precedentemente creato viene eliminato senza nessun avviso.

E sarebbe meglio dare la possibilità all'utente di impostare la directory tramite argomento.

Ma questi sono compiti che vi lascio per casa!

Enjoy!