아카이브 폴더를 만들지 않고 파일 내용 압축 해제


37

많은 디렉토리, 파일 등을 포함하는 myarchive.zip 파일이 있습니다.이 myarchive.zip 파일이 "b"라는 디렉토리에 있다고 가정 해 봅시다. "unzip myarchive.zip"명령을 사용하면 시스템은 기본적으로 zip 파일의 내용으로 "myarchive"라는 디렉토리를 만듭니다. 나는 할 수 없습니다 시스템이 "myarchive"디렉토리를 만들려면 - 난 그냥 내용이 "B"디렉토리에 압축 해제 할. 이게 가능해?

내가 지금하고있는 일은 단순히 "cp"명령을 실행하여 새로 작성된 디렉토리 (이 경우 "myarchive"에서 "b")로 파일을 원하는 위치로 복사하는 것입니다.


8
기본적 unzip으로 디렉토리를 만들지 않습니다. zip 파일은 아마도 최상위 디렉토리에 디렉토리가있을 것입니다.
Chris Down

3
mv대신에 사용할 수 있습니다 cp. mv archive/* .; rmdir archive/또는 유사합니다.
frostschutz

답변:


45

내 버전 unzip에는 -j디렉토리를 만들지 않는 옵션이 있습니다.

그래서

unzip -j /path/to/file.zip

파일에 저장된 디렉토리 구조를 복원하지 않고 모든 파일을 현재 디렉토리로 추출 zip합니다.

당신은 단지 아카이브에서 디렉토리의 한 단계, (추출 제거하려는 경우 myarchive/dir/filedir/file하지를 file), 당신은 사용할 수 있습니다 bsdtar(지원을 수행하는 zip이외에 파일을 tar대신하고 파일) -s옵션을 선택합니다.

bsdtar -xf /path/to/file.zip -s'|[^/]*/||'

8
-j아카이브 디렉토리 구조를 사용 하는 경우 재 작성되지 않으며 모든 파일이 추출 폴더에 저장됩니다. 이는 모든 하위 폴더가 삭제 되었음을 의미 합니다. 그래서 당신은 할 것인지 zip/A/f1, zip/A/B/f2그리고 zip/A/B/C/f3당신은 F1, F2, F3와 함께 하나의 폴더로 끝날 것입니다. 다른 하위 폴더에 같은 이름의 파일이 있으면 펑키합니다. 일반적으로 전체 디렉토리 구조가 아닌 최상위 폴더를 삭제하려고합니다.
크리스티안 브라 비

3
@CristianVrabie, 그것이 바로 대답에서 말하는 것입니다. 당신이 요구하는 것에 대한 bsdtar 대안을 추가했습니다. 편집을 참조하십시오.
Stéphane Chazelas


1

zip 파일에 저장된 폴더 경로를 사용하지 않고 특정 폴더로 압축을 풀려면 이 방법 -j으로 -d옵션에 옵션을 사용할 수 있습니다. :

unzip -j /path/to/file.zip -d other_folder

또는 귀하의 경우

unzip -j myarchive.zip -d b

2
당신이 할 수있는 것이 옳습니다. 그러나 하위 디렉토리를 만들지 않으므로 여전히 다른 단계를 통합해야합니다. OP가 아카이브의 루트 디렉토리 이름을 다른 이름으로 바꾸고 나머지 구조는 해당 디렉토리 아래에 유지하려고합니다.
Pryftan

-1

수행 unzip myarchive.zip하면 myarchive모든 것이 포함 된 디렉토리 가 생성되는 경우 zip 파일의 작성자가 해당 디렉토리에서 zip을 실제로 수행했음을 의미합니다.

원하는 것을 만드는 유일한 방법은 수행 한 후에 모든 내용을 디렉토리 밖으로 옮기는 것입니다 unzip.

[user@host]:some/path/b$ unzip myarchive.zip

[user@host]:some/path/b$ ls{ 디렉토리를 보여줍니다myarchive }

[user@host]:some/path/b$ mv myarchive/* .

[user@host]:some/path/b$ rm -R myarchive

[user@host]:some/path/b$ ls{ myarchive의 첫 번째 레벨을 보여줍니다 (직접적으로 b) }


1
mv myarchive/.* ..gitignore 및 .htaccess와 같은 모든 숨겨진 파일을 이동 해야합니다 .
Kinjal Dixit

1
@KinjalDixit 저도 그렇게 생각했습니다. Antoine Kinjai가 지적한 것처럼 예제에는 치명적인 결함 rm -Rls -a있습니다. 이제 실행할 때 어떤 일이 발생 rm -R하고 도트 파일이 있습니까? 복사하지 않아서 길을 잃었습니다. 당신은 정말로 그것을 고쳐야 할 것입니다. 그리고 그 차이를 설명해야 할 것입니다. 왜냐하면 초보자를 상당히 많이 잡아 먹을 것이기 때문입니다. 그리고 이것을 고려하십시오 : 그것이 그들이 보관소가 아닌 경우 어떻게해야합니까? 또는 압축 해제 된 아카이브를 삭제하라는 명령에 추가하면 어떻게됩니까?
Pryftan

Otoh rmdir는 먼저 비어 있는지 확인하지만 사용자가 도트 파일에 대해 모른다면 혼동 될 수 있습니다.
Pryftan
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.