Unix zip 디렉토리이지만 특정 서브 디렉토리 (및 그 안의 모든 디렉토리)는 제외


115

디렉토리를 압축하려고하는데 (SSH를 통해 Unix에서) 몇 개의 하위 디렉토리 (및 그 안의 모든 파일과 디렉토리)를 제외해야합니다.

지금까지 나는 이것을 가지고있다 :

zip -r myarchive.zip dir1 -x dir1/ignoreDir/**/* 

그래도 작동하지 않는 것 같습니다.

나는 또한 시도했다

zip -r myarchive.zip dir1 -x dir1/ignoreDir1/* dir1/ignoreDir2/*

그러나 여전히 ignoreDir1 및 ignoreDir2 내에 서브 디렉토리가 포함됩니다.

제외하려는 디렉토리의 하위 디렉토리 구조는 상당히 크므로 -x 인수에 각 디렉토리를 추가 할 수 없습니다.

누구든지 이것을하는 방법을 알고 있습니까?


@AlexanderMills-이 질문을보십시오.
jww

답변:


130

나는 너무 가까웠다!

필요한 실제 명령은 다음과 같습니다.

zip -r myarchive.zip dir1 -x dir1/ignoreDir1/**\* dir1/ignoreDir2/**\*

시원하고 팔로우 해 주셔서 감사합니다! 그런데 자신의 대답을 받아 들일 수 있습니다.
다니엘 H

2
이것은 osx에서 나에게 효과가 없었습니다. @pathfilder 답변이 그랬습니다.
rynop

11
-x dir1 / ignoreDir1 / ** \ * 대신 다음을 수행 할 수 있습니다. -x dir1 / ignoreDir1 / \ *
Richard Gomes

67

내 특정 시스템의 경우 디렉토리를 제외하기 위해 제외 된 디렉토리 주위에 따옴표를 넣어야했으며 매력처럼 작동했습니다.

zip -r myarchive.zip dir1 -x "dir1/ignoreDir1/*" "dir1/ignoreDir2/*"

노트:

-제외 할 디렉토리와 그 안의 모든 파일을 모두 제외했습니다.

-제외하려는 디렉토리의 전체 경로를 사용해야합니다!


5
이것은 Mac OS에서 작동하는 것입니다. :-)
신체적

9
아무도 경로를 인용하거나 별표를 피해야하는 이유를 설명하지 않았으므로 그 이유는 다음과 같습니다. 경로가 인용되지 않거나 와일드 카드가 이스케이프되면 쉘은에 전달 하기 전에 와일드 카드 확장을 수행 zip합니다. 지정된 디렉토리의 항목에 대한 경로이지만 서브 디렉토리 내의 파일에 대한 경로 zip는 아니므로 지정된 디렉토리 아래의 모든 항목을 무시하지 않습니다.
zagrimsan

원래 이것이 Mac OS에서 내 디렉토리에 공간이 있었기 때문에 이것이 작동 한 이유 중 하나라고 생각합니다. \
pathfinder

@zagrimsan을 정리해 주셔서 감사합니다. 그것은 문제를 해결 하고 그 이유를 설명하여 우리가 그것을 이해하게했습니다 (이것은 나중에 다른 것들에도 유용 할 것입니다). 👍
Synetech

8

@sulman 사용 :

     zip -r myarchive.zip dir1 -x dir1 / ignoreDir1 / ** \ * dir1 / ignoreDir2 / ** \ *

다음을 사용하여 zip 아카이브에 dir1 / ignoreDir1 / 빈 폴더를 계속 포함합니다.

     zip -r myarchive.zip dir1 -x dir1 / ignoreDir1 ** dir1 / ignoreDir2 **

트릭을 수행하면 dir1 대신 하위 폴더에서 선행 **을 사용하여 검색 할 수도 있습니다


그래! 이것에 빛을 비추어 주셔서 감사합니다!
sulman

7

다음은 할 것입니다

zip -r myarchive.zip dir1 -x dir1 / ignoreDir1 \ * dir1 / ignoreDir2 \ *

**@sulman을 위해 무엇이 필요 했습니까?

그것은 다음과 같이 나를 위해 매력처럼 작동합니다.

[root@ip-00-000-000-000 dir1]# ls -lrt dir1/ 
total 16
drwxr-xr-x 2 root root 4096 Oct 31 07:38 ignoredir1
drwxr-xr-x 2 root root 4096 Oct 31 07:38 ignoredir2
drwxr-xr-x 2 root root 4096 Oct 31 07:39 dir3
-rw-r--r-- 1 root root    8 Oct 31 07:39 test.txt

[root@ip-00-000-000-000 temp]# zip -r dir1.zip dir1 -x dir1/ignoredir1\* dir1/ignoredir2\*
  adding: dir1/ (stored 0%)
  adding: dir1/dir3/ (stored 0%)
  adding: dir1/dir3/test3.txt (deflated 13%)
  adding: dir1/test.txt (stored 0%)

**가 왜 필요한지 모르겠습니다. 다른 사람이 이것에 대해 약간의 빛을 비출 수 있습니까?
sulman

죄송합니다, @sulman, 잘못 입력했습니다. 내가 의미하는 바는 최신 편집에 따른 것입니다. 나를 위해 매력처럼 작동 :)
ericn

1

다른 답변과 마찬가지로 디렉토리의 모든 내용을 제외하는 대신 디렉토리를 완전히 제외하십시오.

zip -r myarchive.zip dir1 -x dir1/ignoreDir1/\* dir1/ignoreDir2/\*

0

나는 이것이 David R Heffelfinger 에서 작동 한다는 것을 알았습니다 .

zip -r myarchive.zip dir1 -x dir1/ignoreDir1\* dir1\ignorDir2\*

디렉토리와 그 내용을 제외했습니다.


확실히 사이의 백 슬래시 dir1와는 ignorDir2슬래시하기위한 것입니다. 다른 백 슬래시가 백 슬래시임을 의미합니까? 그렇다면, 2 년 전의 퍼지 비의 대답을 방금 복사했습니다.
G-Man

-1

나를 위해 일했다 : zip -9 -r ~ / folded.zip online -x folder / folder2 / folder3 / foldern / \ * .

별표는 탈출해야합니다.


2
1 년 전 Rick Ehrahrt 또는 몇 년 전 Eric의 솔루션과 다른 점은 무엇입니까? 새로운 솔루션을 게시하기 전에 제공된 솔루션을 읽으십시오 ...
zagrimsan

별표 앞에 백 슬래시를 추가했기 때문에 (즉, 별표를 벗어나기 위해). 내가하지 않으면 내 작업의 Linux 버전에서 작동하지 않습니다.
Francisco M

또한 Rick Ehrahrt (2014)와 eric (2012)는 별표를 피하기 위해 동일한 솔루션을 게시했습니다. 솔루션에는 아무런 문제가 없지만 솔루션이 작동하는 이유를 설명하여 솔루션에 깊이를 더할 수 없다면 같은 것을 여러 번 게시하는 것은 의미가 없습니다. 이와 같은 간단한 경우에는 더 이상 설명 할 것이 없습니다. 개인적으로 이것을 취하지 마십시오. 여기서 나의 유일한 의도는 SU를 깨끗하고 간결하게 유지하여 사용자가 최소한의 노력으로 최상의 솔루션을 찾을 수 있도록 돕는 것입니다.
zagrimsan
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.