Tar - 하위 폴더의 모든 파일을 제외하지만 중첩 폴더는 제외합니다.

Tar - 하위 폴더의 모든 파일을 제외하지만 중첩 폴더는 제외합니다.

다음 폴더의 .tgz 아카이브를 생성해야 합니다.

pack
  |
  rest
    |
    vendor (folder)
    |
    ----index.php
    |
    ----info.log
    | 
    another (folder)
    |
    ---index.php
    |
    ---info.log
    |
    ---somefile.someext 
   |
   somefolder1
   |
   somefoldern
   |
   somefiles.somexts

단순히 exclude=index.phpetc를 발행하면 의도하지 않은 결과가 발생할 수 있습니다.행상인그러면 해당 이름을 가진 파일이 직접 또는 해당 하위 폴더 중 하나에 있을 수 있습니다. 나머지 폴더의 모든 파일 내용을 무시하고 그 아래의 하위 폴더는 무시하지 않도록 tar에 지시할 수 있는지 여부를 문서에서 알 수 없습니다.

답변1

이 게시물을 접한 사람들을 위해 적어도 Ubuntu 14.04에서 작동하는 솔루션이 있습니다. 위에 표시된 폴더 구조의 경우

tar -zcf pack.tgz --exclude-from=/path/to/excludes.list pack

제외.목록내 경우에는 다음이 포함되어 있습니다.

rest/index.php
rest/info.log
rest/filetoexclude.ext

...기본적으로 제외할 파일 목록입니다. 지침

  • Excepts.list 파일에 대한 절대 경로를 사용하면 스크립트 언어에서 실행되는 셸 명령을 통해 아카이브를 빌드하는 명령을 더 쉽게 작성할 수 있습니다.
  • 제외된 파일의 형식은 folder/file.ext,비교적보관 중인 폴더로 이동합니다.
  • 각 파일 이름 항목 뒤에는 개행 문자가 와야 합니다. 텍스트 편집기에서는 파일 이름 뒤에 공백을 추가하는 것이 쉽습니다. 이 경우 공백은 무시되지 않습니다.

답변2

another/index.php" "를 패턴으로 사용하세요 (또는 " rest/another/index.php").

$ mkdir -p pack/rest/vendor
$ mkdir -p pack/rest/another
$ touch pack/rest/{vendor,another}/index.php
$ tar --create --verbose --file  xx.tar --exclude "another/index.php"  pack/
pack/
pack/rest/
pack/rest/another/
pack/rest/vendor/
pack/rest/vendor/index.php

findtar 파일 내용의 더 복잡한 선택의 경우 정확한 입력 목록을 생성할 수 있을 때까지 다듬기 및, 또는 등의 작업을 사용하는 것이 더 쉽다는 것을 알았습니다 . 그런 다음 이를 가져오고 cpio스키마 --format=ustar를 내보내 tar 파일을 생성합니다.

관련 정보