2009-09-04 2 views
2

여러 디렉토리가 포함 된 .zip 아카이브가 있습니다. rubyzip gem을 사용하여 .zip 아카이브로 이동하여 지정된 디렉토리 (및 그 내용)를 복사하고 디렉토리를 두 ​​번째 .zip 아카이브로 이동하십시오.rubyzip을 사용하여 zip 아카이브 내의 디렉토리를 두 ​​번째 zip 아카이브로 복사하는 방법은 무엇입니까?

이상적으로는 첫 번째 .zip 아카이브의 내용을 추출한 다음 두 번째 아카이브로 다시 압축하지 않아도됩니다. 나는 rubyzip gem에 제공된 메소드를 사용하는 방법이 있기를 바라고 있습니다.

답변

1

rubyzip 보석의 관리자 중 한 사람과 확인한 결과, 이것이 가능하지 않다는 것을 알았습니다.

+0

[Johns 응답] (http://stackoverflow.com/a/11077181/676874)을 확인하십시오. 나는 단지 그것을 성공으로 시험했다. – knut

0

이것은 무차별 방식의 비트로 (응용 프로그램에서 작동하지 않을 수도 있음) 처음 Zip 파일 전체를 복사 한 다음 rubyzip 메서드를 사용하여 복사 한 파일에서 대상 디렉토리를 제외한 모든 항목을 삭제할 수 있습니다 .

deflate 압축 (모든 파일을 개별적으로 압축 된 항목으로 저장)을 사용하는 경우 이론적으로 묻고있는 것이 가능해야합니다.

+0

Zip::ZipFile를 사용하지만, 한 .zip의 내용이 너무 커서 나는에있다 여러 복사본을 만드십시오 - 너무 느리게 끝납니다. – rswolff

+0

질문에 더 많은 정보를 추가하면 도움이 될 것입니다 : 어떤 OS를 사용하고 있습니까? zip 크기? 지퍼에 파일을 저장하는 이유. –

1

RubyZip 라이브러리는 이후 지원을 위해 업데이트되어 있어야합니다. 이것은 나를 위해 일했다. RubyZip < 1.0 버전

require 'rubygems' 
require 'zip' # gem 'rubyzip', '>= 1.0' 

Zip::File.open('large.zip', false) do |input| 
    Zip::File.open('small.zip', true) do |output| 
    input.glob('my_folder_name/*') do |entry| 
     entry.get_input_stream do |input_entry_stream| 
     output.get_output_stream(entry.name) do |output_entry_stream| 
      # you could also chunk this, rather than reading it all at once. 
      output_entry_stream.write(input_entry_stream.read) 
     end 
     end 
    end 
    end 
end 

, require 'zip/zip' 대신, 대신 나는 실제로 당신이 언급 한 무력 방법을 시도 Zip::File

+0

답변 해 주셔서 감사합니다. 방금이 코드를 정확히 찾았습니다. 제대로 작동했습니다. – knut

+0

고마워요! 나는 당신의 공헌을 대답에 통합했습니다. –

관련 문제