2013-07-08 3 views
1

zip 파일이 있습니다. 그것은 10 개의 파일 또는 하나의 폴더를 가질 수 있습니다. 이 폴더에는 10 개의 파일이 있습니다. zip 파일에 폴더가있는 경우 위의 디렉토리 중 하나의 디렉토리 즉, 모든 파일을 이동해야합니다. 즉Ruby : zip 파일의 폴더 내용 복사

zipfile.zip에 폴더가 있습니다. 폴더에는 10 개의 파일이 있습니다. 일반적으로 압축을 풀면 zipfile/folder/10files가됩니다. 자, 나는 zipfile/10 파일처럼되어야합니다. 즉. 모든 파일을 위의 한 디렉토리로 이동하십시오.

어떻게 하시겠습니까? 도와주세요.

답변

1

리눅스 unzip를 사용하여 상관하지 정말 하위 디렉토리에 대해 걱정하지 않는 경우 :

def unzip(file) 
    to = File.join(File.dirname(file), File.basename(file, ".*")) 
    Dir.mkdir(to) unless File.exists?(to) 
    `unzip -j #{file} -d #{to}` 
end 
# unzip('yourfile.zip') 

이 방법은 ZipFile에 같은 이름을 가진 zip 파일과 같은 디렉토리에 새로운 디렉토리를 생성 (빼기). 그런 다음 모든 경로를 무시하고 해당 디렉토리로 zip 파일을 추출 (unzip 사용)합니다 (-j 플래그는 정크 경로로 unzip에게 알려줍니다).

편집 귀하의 코멘트 당

을 여기에 시스템없이 할 수있는 방법은 호출입니다 :

def unzip(file) 
    Zip::ZipFile.open(file) do |zipfile| 
    to = File.join(File.dirname(file), File.basename(file, ".*")) 
    FileUtils.mkdir(to) unless File.exists? to 
    zipfile.each do |f| 
     if f.file? # Don't extract directories 
     fpath = File.join(to, File.basename(f.name)) 
     zipfile.extract(f, fpath) unless File.exists?(fpath) 
     end 
    end 
    end 
end 
+0

나는 루비 라이브러리 호출만을 사용하여 수행 할 수 있습니다. 시스템 호출이 없습니다. –

+0

시스템 호출을 사용하지 않는 대안으로 내 대답을 업데이트했습니다. –