zip 파일을 생성할 때 모든 하위 디렉터리에서 특정 파일을 제외합니다.

zip 파일을 생성할 때 모든 하위 디렉터리에서 특정 파일을 제외합니다.

압축하는 상위 폴더의 모든 하위 디렉터리에 있는 모든 .zip 파일을 제외하고 싶지만 작동하지 않습니다. 페이지를 확인해보니 man zip,이것그리고이것성공하지 못한 질문.

나는 시도했다:

zip -q -r FILE.zip * -x \*.zip
zip -q -r FILE.zip * -x\*.zip
zip -q -r FILE.zip * -x */\.zip
zip -q -r FILE.zip * -x \*.zip
zip -q -r FILE.zip * -x \*.zip\*
zip -q -r FILE.zip * -x*.zip

그리고 여전히 모든 zip 파일이 포함되어 있습니다(이전에 이 명령으로 생성된 상위 폴더에 있는 파일은 제외).

편집: 문제는 폴더에 일부 zip 파일이 포함된 FILE.zip이 이미 있다는 것입니다. 명령zip업데이트대신에창조하다-u 옵션을 지정하지 않더라도 생성하려는 파일이 이미 존재하는 경우 새 압축 파일이 생성됩니다.

답변1

이미 시도한 것처럼 제외 패턴을 인용해야 합니다. "더 좋은" 솔루션이 있더라도 첫 번째 방법은 실제로 작동해야 합니다.

하지만 작업할 수 있는 간단한 예를 살펴보겠습니다. 다음 .foo과 같은 확장자를 가진 파일로 일부 디렉터리를 만들었습니다 .bar.

find여기에서는 테스트 디렉터리를 나열하기 위해 실행합니다 . 여기에는 모든 파일과 디렉터리가 표시됩니다.

$ find
.
./1.bar
./1.foo
./sub1
./sub1/sub2
./sub1/sub2/1.bar
./sub1/sub2/1.foo
./sub1/1.foo
./sub1/1.bar

이제 우리는 무엇이 작동하는지 볼 수 있습니다
(우리는 일치와 관련이 없는 출력 파일을 방해하지 않게 합니다).

모든 파일 압축:

$ zip -r /tmp/out.zip *          
  adding: 1.bar (stored 0%)
  adding: 1.foo (stored 0%)
  adding: sub1/ (stored 0%)
  adding: sub1/sub2/ (stored 0%)
  adding: sub1/sub2/1.bar (stored 0%)
  adding: sub1/sub2/1.foo (stored 0%)
  adding: sub1/1.foo (stored 0%)
  adding: sub1/1.bar (stored 0%)

파일을 제외하고 패킹 .foo:

$ rm /tmp/out.zip
$ zip -r /tmp/out.zip * -x '*.foo'
  adding: 1.bar (stored 0%)
  adding: sub1/ (stored 0%)
  adding: sub1/sub2/ (stored 0%)
  adding: sub1/sub2/1.bar (stored 0%)
  adding: sub1/1.bar (stored 0%)

공장!
첫 번째 패턴으로 다시 시도해 보세요.

$ rm /tmp/out.zip
$ zip -r /tmp/out.zip * -x \*.foo 
  adding: 1.bar (stored 0%)
  adding: sub1/ (stored 0%)
  adding: sub1/sub2/ (stored 0%)
  adding: sub1/sub2/1.bar (stored 0%)
  adding: sub1/1.bar (stored 0%)

작동합니다!

그럼... 실제로 그곳에서 무엇을 했는지 자세히 살펴보세요.

먼저 -q"조용함" 옵션을 제거하여 예제에 표시된 표준 메시지를 숨길 수 있습니다.
다음 단계로 -v"상세" 옵션을 추가하여 자세한 내용을 확인하세요. 너무 많을 수도 있지만 흥미로운 내용을 발견할 수도 있습니다.


의견을 보면 -q이미 도움이 되었다는 것을 알 수 있습니다.

근본적인 문제는 테스트에 사용된 zip 명령이 출력 파일의 존재로 인해 수정되었다는 것입니다.
기술적으로는 자체적으로 수정되었습니다...

에서man zip:

Command format.  The basic command format is

               zip options archive inpath inpath ...

        where archive is a new or existing zip archive and inpath is a directory or
        file path optionally including wildcards.  When given the name of an exist‐
        ing zip archive, zip will replace identically named entries in the zip  ar‐
        chive (matching the relative names as stored in the archive) or add entries
        for new names.

관련 정보