2016-06-06 3 views
0

Ruby Project에서 작업 중입니다. 모든 파일 대신 Zip 아카이브에서 특정 파일을 추출해야합니다. 코드 추출물 위Ruby의 Zip 아카이브에서 특정 파일의 압축을 풉니 다.

require 'rubygems' 
 
require 'zip' 
 
@folder = "C:/Users/Shek/Desktop/aadi_elements.zip" 
 
@zip = '' 
 
@vals = [] 
 
@files_names = [] 
 
@articles = Article.all 
 
Zip::File.open(@folder) { |zip_file| 
 
    @zip = zip_file 
 
    zip_file.each { |f| 
 
    @vals.push f 
 
    @files_names.push f.name 
 
    } 
 
}

모든 파일을하지만 내 reqiurement는 클릭 이벤트가 수행되는 특정 파일을 추출하는 것입니다 - : 나는 "우편"보석을 사용하여 다음과 같은 코드를 시도했다. 미리 감사드립니다.

+0

간단한 if (f.name == <클릭 한 파일 이름>)를 zip_file.each에 넣을 수는 없습니까? – xyious

+0

@xyious 예이 조건은 훌륭하게 작동하지만 파일 이름을 클릭하면 파일을 압축해야하는 다른 메서드를 호출해야합니다. 그런 다음 각 루프는 필요하지 않은 파일 수만큼 실행됩니다. 따라서 코드는 최적화되지 않을 것입니다. – Mandeep

+0

문제가 될 때까지 최적화에 대해 걱정하지 않겠습니다. 또한 약간의 최적화로 올바른 파일을 찾은 후에 루프를 멈출 수 있습니다. 압축 해제 기능과 웹 사이트의 디스플레이 기능이 동일하게 정렬되어 있으면 파일 번호로 건너 뛸 수 있습니다. 그것이 사실이라면 테스트 할만한 가치가있을 것입니다. – xyious

답변

0

보석 사용 여부가 명확하지 않으므로 가장 쉬운 방법은 unzip OS 실행 파일을 호출하는 것입니다. 다음은 unzip myzipfilespec desired_file_to_unzip의 사용법을 보여주는 두 줄의 쉘 명령입니다.

먼저 (비어있는) 파일 a, b 및 c를 만들고 zip 파일의 내용을 unzip -v으로 표시합니다. 그런 다음 unzip을 사용하여 zip 파일에서 하나의 파일을 압축 해제합니다.

➜ ~  touch a; touch b; touch c; zip abc a b c; rm a b c; unzip -v abc 
updating: a (stored 0%) 
updating: b (stored 0%) 
updating: c (stored 0%) 
Archive: abc.zip 
Length Method Size Ratio Date Time CRC-32 Name 
-------- ------ ------- ----- ---- ---- ------ ---- 
     0 Stored  0 0% 06-06-16 17:51 00000000 a 
     0 Stored  0 0% 06-06-16 17:51 00000000 b 
     0 Stored  0 0% 06-06-16 17:51 00000000 c 
--------   ------- ---       ------- 
     0    0 0%       3 files 
➜ ~  unzip abc b 
Archive: abc.zip 
extracting: b 
+0

bash 스크립팅에 익숙하지 않았습니다 :( – Mandeep

+0

첫 번째 (복합 명령) 라인은 일러스트레이션을 위해 zip 파일을 설정하기위한 것이 었습니다. 'unzip' 유틸리티가 있다고 가정하면'unzip # {zip_filespec} # {filespec_to_unzip}'을 사용하여 원하는 파일의 압축을 풀 수 있습니다. –

+0

임시 디렉토리를 만들고'zip' 및'unzip ' 'unzip -v'는 zip 파일의 내용을 보여줍니다. 이것은 zip 파일 관리의'puts'와 같습니다.) –

관련 문제