2014-11-04 6 views
0

Так что в основном я создаю кучу zip-файлов, содержащих внутри него файлы pwe и pws.rails rubyzip сделать копию нескольких ZIP-файлов внутри нового zipfile

Следующий код создает кучу архивных файлов, которые называют как orgname_org_member_orguser1.zip , который содержит 2 файлы (PWS и PWE)

@successful_orgs.each do |org| 
    file = "#{RAILS_ROOT}/my-data/#{org[:location]}_#{org[:member]}_#{org[:username]}.zip" 
    generate_file(ups_file, org) 
end 

    def generate_file(file, org) 
    zipfile = Zip::ZipFile.open(file, Zip::ZipFile::CREATE) 
    pwe_text, pws_text = MyGenerator.password 
    pwe_file = "#{RAILS_ROOT}/tmp/#{org[:location]}_#{org[:member]}.pwe" 
    pws_file = "#{RAILS_ROOT}/tmp/#{org[:location]}_#{org[:member]}.pws" 

    File.open(pwe_file, 'w') { |file| file.write(pwe_text) } 
    File.open(pws_file, 'w') { |file| file.write(pws_text) } 

    zipfile.add("#{org[:location]}_#{org[:member]}.pwe", pwe_file) 
    zipfile.add("#{org[:location]}_#{org[:member]}.pws", pws_file) 
    zipfile.close 

    File.delete(pwe_file) 
    File.delete(pws_file)  
    end 

Я хочу, чтобы код делать то, что делает (создание zip-файлы и сохранить указанный путь)

Но в дополнение к вышесказанному, я также хочу создать еще один zip-файл с именем all.zip, который будет содержать все созданные zip-файлы.

Значение, all.zip => file1.zip, file2.zip и т.д.

Я не уверен, как incoporate, что логика в моем коде выше. Любая помощь будет оценена по достоинству.

EDIT: я не хочу искать и добавлять все файлы в каталог. Я хочу добавить только файлы zip, созданные во время вышеуказанного кода.

ответ

1

Вы можете собрать все пути зип файлов в массиве, а затем добавить их в новый почтовый файл итеративно:

zip_files = [] 
@successful_orgs.each do |org| 
    file = "#{RAILS_ROOT}/my-data/#{org[:location]}_#{org[:member]}_#{org[:username]}.zip" 
    zip_files << file 
    generate_file(file, org) 
end 

all_zipped = Zip::ZipFile.open("#{RAILS_ROOT}/tmp/all.zip", Zip::ZipFile::CREATE) 
zip_files.each do |f| 
    all_zipped.add(zip_file) 
end 

Обратите внимание, что вы не собираетесь получить какой-либо дополнительного сжатия, делая это.

+0

спасибо @faraz, но я не хочу искать и добавлять все файлы в каталог. Я хочу только файлы zip, созданные во время вышеуказанного кода. – Micheal

 Смежные вопросы

  • Нет связанных вопросов^_^