예를 들어 작업 디렉터리 위의 상대 경로를 사용하여 파일의 압축을 풀려고 하면 ../../foo
다음 메시지가 표시됩니다.
warning: skipped "../" path component(s) in ../../foo
inflating: foo
문제는 우리 소프트웨어가 설치 중에 상대 경로를 사용하여 이러한 zip을 생성하고, 설치가 잘못되면 압축을 풀어 모든 것을 다시 가져간다는 것입니다. 사용자가 일반 설치 디렉터리 "위"에 일부 데이터 파일을 저장하기로 선택하면 결국 ../datafile
백업이 생성됩니다. 이것은 완벽하게 괜찮을 것입니다. 우리는 아카이브를 신뢰하고 필요할 때 파일을 다시 넣기 위해 압축을 풀기를 원합니다. 불행히도 경로 구성 요소 unzip
에 대해 걱정하지 말고 아카이브가 생성된 대로 압축을 풀도록 지시하는 옵션을 찾을 수 없습니다 . ../
이를 수행할 수 있는 감압 옵션이 있습니까?
현재로서는 zip 생성 방법을 변경할 수 있는 방법이 없으므로 "그렇게 하지 마십시오"는 허용되는 대답이 아닙니다. 우리는 주어진 카드를 가지고 플레이해야 합니다. 대상 플랫폼은 RHEL 5입니다.
답변1
이는 귀하의 요구 사항을 충족해야합니다
unzip -: foo.zip
매뉴얼 페이지에서
-: [Acorn, VM/CMS, MVS, Tandem을 제외한 모든 버전] 아카이브 구성원이 현재 "추출 루트 폴더"가 아닌 다른 위치에 추출되도록 허용합니다. 보안상의 이유로 압축을 풀면 일반적으로 추출된 파일 이름에서 "상위 디렉터리" 경로 구성 요소("../")가 제거됩니다. 이 보안 기능(버전 5.50의 새로운 기능)은 압축을 푸는 동안 활성 추출 폴더 트리 헤더 외부의 "민감한" 영역에 실수로 파일을 쓰는 것을 방지합니다. -: 옵션을 사용하면 unzip이 더 자유로운 이전 동작으로 다시 전환되어 "../" 구성 요소를 사용하는 (이전) 아카이브를 정확하게 추출하여 현재 추출 폴더 수준에서 여러 디렉터리 트리를 생성할 수 있습니다. 이 옵션은 루트 디렉터리("/")에 대한 명시적 쓰기를 허용하지 않습니다. 이렇게 하려면 추출 대상 폴더를 루트 디렉터리(예: -d / )로 설정해야 합니다. 그러나 -: 옵션이 지정되면 zip 아카이브에 충분한 "../" 경로 구성 요소를 지정하여 루트 디렉터리를 암시적으로 작성할 수 있습니다. 이 옵션을 사용할 때는 주의하세요.