내 홈 디렉터리에 다음 구조의 폴더가 있습니다.
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-tree
archive.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 호출에 이 옵션을 추가하십시오.