부모 디렉토리를 포함하지 않고 아카이브 압축


30

디렉토리 트리에 많은 폴더를 압축하고 싶습니다.

V-
 something.txt
 folder
 folder
 g.jpg
 h.jar

압축을 시도하면 내용 (하위 디렉토리 및 파일) 대신 v 폴더로 zip 아카이브 작성이 종료됩니다.

어떻게 피할 수 있습니까?

답변:


23

따라서 올바르게 이해하면 루트 폴더를 포함하지 않고 특정 폴더에 파일 및 폴더를 보관하려고합니다.

예:

/test/test.txt
/test/test2.txt

여기서 test.txt 및 test2.txt는 zip에 저장되지만 / test /는 저장되지 않습니다

/ test / 디렉토리로 들어가서 다음과 같이 실행할 수 있습니다.

zip -r filename.zip ./*

filename.zip이라는 동일한 폴더에 아카이브를 만듭니다. 또는 폴더 외부에서 실행하면 실행할 수 있습니다.

zip -r test.zip test/*

/ *는 전체 폴더 대신 폴더의 내용 만 포함하는 부분입니다.

편집 : OP는 여러 개의 지퍼를 원했고 솔루션은 약간의 해킹이되었습니다. 더 나은 방법이 있는지 궁금합니다.

for d in */ ; do base=$(basename "$d") ; cd $base ; zip -r $base * ; mv "${base}.zip" .. ; cd .. ; done;

예, 그러나 나는 같은 일을하는 많은 파일을 가지고 있기 때문에 지루할 것입니다. bash 스크립트 나 모든 폴더가있는 디렉토리에서 동일한 프로세스를 자동화하는 것
Dami

1
스크립트를 실행하고 아카이브에 부모 디렉토리를 만들었습니다. 폴더의 내용 만 아카이브에 보관하고 싶습니다.
Dami

1
내 실수는 조금 놓쳤다. 방금 찾은 -j 매개 변수를 추가하여 원하지 않는 부분을 건너 뜁니다. for d in */ ; do base=$(basename "$d") ; zip -rj "${base}.zip" "$d" ; done;
zzbomb

18
zip -r test.zip test / *는 외부에서 테스트를 zip 파일에 디렉토리로 추가합니다
smihael

4
@ smihael이 언급했듯이 zip -r test.zip test/*작동하지 않습니다. 디렉토리 외부에서 이것을 달성하는 올바른 방법이 있습니까?
andrhamm

22

zip 명령에서 -j또는 --junk-paths옵션을 사용하십시오 .

로부터 우편 man 페이지 :

-j

--junk-paths

Store just the name of a saved file (junk the path), and do not store directory 
names. By default, zip will store the full path (relative to the current 
directory).

정답 인 것 같습니다.
mutant_city

3
중첩 된 경로 / 폴더는 어떻습니까?
GuyPaddock

3
이렇게하면 아카이브의 모든 폴더가 생략되고 다른 폴더에 중복 된 파일 이름이있는 경우이 문제가 발생합니다. 폴더를 신경 쓰지 않고 파일을 원할 때만 사용할 수 있습니다. OP가 요구하는 것은 아니지만 여전히 좋은 지식
Govind Rai

17

이 명령은 어떻습니까?

$ cd somedir ; zip -r ../zipped.zip . * ; cd ..

5
이것이 정답이지만 소개는 자신을 확신하는 것처럼 들리지 않습니다. 또한 명령이하는 일을 조금 설명하는 데 도움이됩니다.
Nephente

1
이것은 내 솔루션이기도하지만 포함되어 있기 때문에 싫어합니다 cd. 저장된 경로를보다 정확하게 지정하는 방법이 있기를 바랐습니다.
nilskp

3

이것이 도움이되기를 바랍니다.

(cd directory && zip -r ../out.zip .)

기본 쉘을 동일한 디렉토리에 유지하고 명령 후에 죽는 서브 쉘의 디렉토리 만 변경합니다.


@Alfred UC 의 답변 에 이것을 주석으로 추가하고 싶었지만 그 명성은 충분하지 않습니다.
케네스

실제로 문제를 해결하면 해결책이 될 수 있습니다.
Yufenyuy Veyeh Dider

이것은 대답으로 더 좋습니다. 이것은 bash와 sh 모두에서 작동합니까?
Arlen Beiler
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.