나는 (즉이 생산 성공적으로 실행하는 bash는 스크립트에서이 매우 간단 라인이 _data.tar이 점을 제외하고, 파일을) 하지 않는를 통해 제외 이야기하는 하위 디렉토리 제외 --exclude옵션 :
/bin/tar -cf /home/_data.tar --exclude='/data/sub1/*' --exclude='/data/sub2/*' --exclude='/data/sub3/*' --exclude='/data/sub4/*' --exclude='/data/sub5/*' /data
대신 _data.tar제외하려는 하위 디렉토리의 파일을 포함하여 / data 아래의 모든 것을 포함 하는 파일을 생성합니다 .
왜 그런지 알아? 이 문제를 해결하는 방법?
업데이트 아래 첫 번째 답변 (최상위 dir 먼저, 마지막 제외 후 공백 없음)에 제공된 링크를 기반으로 관찰을 구현했습니다.
/bin/tar -cf /home/_data.tar /data --exclude='/data/sub1/*' --exclude='/data/sub2/*' --exclude='/data/sub3/*' --exclude='/data/sub4/*' --exclude='/data/sub5/*'
그러나 그것은 도움이되지 못했습니다. 모든 "제외 된"서브 디렉토리가 결과 _data.tar파일에 있습니다.
이것은 수수께끼입니다. 이것이 현재 tar (GNU tar 1.23, CentOS 6.2, Linux 2.6.32의 버그)이든 공백에 대한 tar의 "극단 민감도"및 기타 놓치기 쉬운 오타인지에 관계없이이 버그를 고려합니다. 지금은
이것은 끔찍합니다 . 아래에 제안 된 통찰력을 시도했지만 (후행 없음 /*) 프로덕션 스크립트에서는 여전히 작동하지 않습니다.
/bin/tar -cf /home/_data.tar /data --exclude='/data/sub1' --exclude='/data/sub2' --exclude='/data/sub3' --exclude='/data/sub4'
나는 따옴표와 1 대신 2 개의 공백을 제외하고 내가 시도한 것과 @Richard Perrin이 시도한 것 사이의 차이점을 볼 수 없다. 나는 이것을 시도 할 것이다. 위로 올라가고 다시보고하십시오.
/bin/tar -cf /home/_data.tar /data --exclude=/data/sub1 --exclude=/data/sub2 --exclude=/data/sub3 --exclude=/data/sub4
나는이 모든 tar --exclude민감성이 타르가 아니라 내 환경 에 있다고 생각하기 시작했다 . 그러나 그것은 무엇 일 수 있는가?
효과가 있었다! 마지막으로 시도한 변형 ( --excludes 사이에 이중 공백 대신 작은 따옴표 및 단일 공백 없음 )이 작동하는지 테스트했습니다. 이상하지만 수용.
믿을 수 없는! 이전 버전의 tar(1.15.1)은 최상위 디렉토리가 명령 행에서 마지막 인 경우에만 제외합니다 . 이것은 버전 1.23이 요구하는 것과 정반대입니다. 참고로