7

Ruby on Railsでディレクトリを圧縮するにはどうすればよいですか? rubyzip を試してみましたが成功しませんでした。ディレクトリの内容を個別に圧縮する必要はありません。ディレクトリ自体を圧縮するだけです。

4

2 に答える 2

13

圧縮ファイルにエントリを追加するには、ディレクトリ内の項目をループする必要があります。

def compress(path)
  gem 'rubyzip'
  require 'zip/zip'
  require 'zip/zipfilesystem'

  path.sub!(%r[/$],'')
  archive = File.join(path,File.basename(path))+'.zip'
  FileUtils.rm archive, :force=>true

  Zip::ZipFile.open(archive, 'w') do |zipfile|
    Dir["#{path}/**/**"].reject{|f|f==archive}.each do |file|
      zipfile.add(file.sub(path+'/',''),file)
    end
  end
end

http://grosser.it/2009/02/04/compressing-a-folder-to-a-zip-archive-with-ruby/

コマンドでそれを行う別の方法

Dir["*"].each do |file|
  if File.directory?(file)
    #TODO add OS specific,
    #  7z or tar .
    `zip -r "#{file}.zip" "#{file}"`
  end
end

http://ruby-indah-elegan.blogspot.com/2008/12/zipping-folders-in-folder-ruby-script.html

アップデート

編集/更新をしてくれたMahmoud Khaledに感謝します

Zip::File.openの代わりに新しいバージョンを使用する場合Zip::ZipFile.open

于 2012-07-16T17:58:34.320 に答える
0

tarを使用してディレクトリのアーカイブを作成できます tar -cvf your_dir.tar your_dir/

次に、-を使用してレール内のタールを圧縮します

def gzip_my_dir_tar(your_dir_tar_file)
  content = File.read(your_dir_tar_file)
  ActiveSupport::Gzip.compress(content)
end

Rails 3ですでに回答済み:リクエストに応じて圧縮ファイルを生成するにはどうすればよいですか?

于 2012-07-17T05:19:30.027 に答える