나는 (즉이 생산 성공적으로 실행하는 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
민감성이 타르가 아니라 내 환경 에 있다고 생각하기 시작했다 . 그러나 그것은 무엇 일 수 있는가?
효과가 있었다! 마지막으로 시도한 변형 ( --exclude
s 사이에 이중 공백 대신 작은 따옴표 및 단일 공백 없음 )이 작동하는지 테스트했습니다. 이상하지만 수용.
믿을 수 없는! 이전 버전의 tar
(1.15.1)은 최상위 디렉토리가 명령 행에서 마지막 인 경우에만 제외합니다 . 이것은 버전 1.23이 요구하는 것과 정반대입니다. 참고로