tar를 사용할 때 디렉터리를 제외할 수 없습니다.

tar를 사용할 때 디렉터리를 제외할 수 없습니다.

내 홈 디렉터리에 다음 구조의 폴더가 있습니다.

top-tree
+-- .git
+-- branch1
|   +-- branch11
    |   +-- .idea
    |   +-- branch111
    |   +-- branch112
    |   +-- branch113
    |   +-- branch114
        |   +-- branch1141
        |   +-- branch1142
        |   +-- branch1143
    |   +-- branch115
    |   +-- branch116
    |   +-- branch117

이제 전체 콘텐츠를 압축하고 싶지만 .git및 등의 모든 숨겨진 디렉터리 .idea와 최소 2개의 하위 디렉터리가 있는 하나의 특정 디렉터리를 제외해야 합니다 branch114(하위 디렉터리 수는 수시로 변경될 수 있음).

다음 매개변수와 함께 tar 명령을 사용하여 이 작업을 수행하려고 했습니다.

tar -czvf archive.tar.gz --exclude=~/top-tree/branch1/branch11/branch114 --exclude=~/top-tree/.git --exclude=~/top-tree/branch1/branch11/.idea top-tree/

tar -czvf archive.tar.gz --exclude=~/top-tree/branch1/branch11/branch114 --exclude=~/top-tree/.*

그러나 위의 어느 것도 작동하지 않는 것 같습니다. 나타날 때마다 폴더의 전체 내용은 top-treearchive.tar.gz에 저장됩니다. 나는 많은 것을 시도했습니다(여기서 인용하기에는 너무 많습니다.이것1) 본 웹사이트 및 기타 웹사이트에서의 제안, 사용 매개변수 배열 등.그런데 다른 비슷한 질문들과 달리 제 문제는 경로 문제인 것 같습니다. 제가 사용하는 tar 버전은 1.29입니다. 왜 이것이 작동하지 않습니까?

답변1

양식 경로를 보관하고 양식 경로를 제외하고 있습니다. 제외 패턴은 어떤 것과도 일치하지 않습니다.top-tree/stuff/home/skrowten/top-tree/stuff

간단한 해결책은

tar -czvf archive.tar.gz --exclude=top-tree/branch1/branch11/branch114 --exclude=top-tree/.git --exclude=top-tree/branch1/branch11/.idea top-tree

예를 들어 a가 있으면 top-tree/subdir/top-tree/.git이 항목도 제외됩니다. 이를 방지하는 한 가지 방법은 시작 명령줄 경로를 사용하고 ./해당 경로가 루트 디렉터리에만 나타난다는 사실에 의존하는 것입니다..

tar -czvf archive.tar.gz --exclude=./top-tree/branch1/branch11/branch114 --exclude=./top-tree/.git --exclude=./top-tree/branch1/branch11/.idea ./top-tree

./선도하는 것이 귀찮 다면 --transform='s!^\./!!'tar 호출에 이 옵션을 추가하십시오.

관련 정보