작업 디렉터리(예: ) 위에 상대 경로가 있는 파일의 압축을 풀려고 하면 ../../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을 제외한 모두] 현재 ''추출 루트 폴더'' 외부 위치로 아카이브 구성원을 추출할 수 있습니다. 보안상의 이유로 unzip은 일반적으로 추출된 파일 이름에서 ''상위 디렉토리'' 경로 구성 요소(''../'')를 제거합니다. 이 안전 기능(버전 5.50의 새로운 기능)은 unzip이 활성 추출 폴더 트리 헤드 외부의 '민감한' 영역에 실수로 파일을 쓰는 것을 방지합니다. -: 옵션을 사용하면 압축 해제를 이전의 보다 자유로운 동작으로 다시 전환하여 ''../'' 구성 요소를 사용하여 현재 추출 폴더 수준에서 여러 디렉터리 트리를 생성하는 (이전) 아카이브를 정확하게 추출할 수 있습니다. 이 옵션은 루트 디렉터리(''/'')에 대한 쓰기를 명시적으로 활성화하지 않습니다. 이를 위해서는 추출 대상 폴더를 루트(예: -d / )로 설정해야 합니다. 그러나 -: 옵션이 지정되면 zip 아카이브 내에 충분한 ''../'' 경로 구성 요소를 지정하여 루트 디렉터리에 암시적으로 쓸 수 있습니다. 이 옵션은 매우 주의해서 사용하세요.