/에서 tar를 실행할 때 "/usr/sbin"을 제외하지 않고 "/sbin"을 제외하려면 어떻게 해야 합니까?
tar --exclude=dir
일부 세부 사항: 일반적으로 tar의 현재 작업 디렉터리에서 볼 수 있는 "dir"과 그 하위 폴더만 제외되는 것이 허용됩니다 .
나는 이 견해를 뒷받침하는 문서를 찾지 못했고 실제로 그것이 거짓임을 발견했습니다. 저는 고대 SuSE, 일부 CentOS 및 Debian(Lenny에서 Jessie까지)을 사용하여 테스트하고 있습니다. tar --exclude=dir
"dir"을 제외하세요.어디든 상관없어그것을 발견!
개념의 증거:
cd /tmp
mkdir -p dira/dirb/{a,b,c,d,e}
mkdir -p dirc/dira/{a,b,c,d,e}
tar c dir? | tar t
생성한 tar "파일" 안에 방금 생성한 각 디렉터리가 표시됩니다. 그것은 중요하지 않습니다. 하지만 함께:
tar c dir? --exclude=dira/* | tar t
출력은 다음과 같습니다
dira/
dirc/
dirc/dira/
내용이 아닌 디렉터리 자체를 제외하는 경우에도 마찬가지입니다.
tar c dir? --exclude=dira | tar t
다음을 제공합니다:
dirc/
그건 내가 원하는 게 아니야! "dira/를 제외하고 싶습니다.”, 그러나 “dira/는 제외되지 않습니다." dira 자체가 다른 디렉터리의 하위 폴더인 경우.
태그가 지정된 일부 파일을 "dira"에 넣는 것이 도움이 되지만 그렇게 할 수 없는 경우도 있습니다. 예를 들어 백업 사용자에게 제외된 디렉터리에 대한 쓰기 권한이 없거나 디렉터리가 변경되지 않는 것이 중요한 경우...
답변1
Gnu tar를 사용한다면 여기에 광범위한 매뉴얼이 있습니다.여기이 --anchored
옵션에 대해 토론하고 제외된 패턴과 포함된 전역 패턴이 어떻게 다른지 논의하세요. 당신은 시도 할 수 있습니다:
tar c dir? --anchored --exclude=dira | tar t
답변2
불행하게도 tar
이는 사실이 아니다.모두파일 이름(하위 디렉터리 또는 상위 디렉터리 포함)을 선택하고 부분 일치를 고려합니다. 하고 싶은 일은 불가능하다오직아스팔트.
다행히도 여러분은 UNIX 시스템을 사용하고 있으므로 개별 명령뿐만 아니라 전체 도구 상자를 마음대로 사용할 수 있습니다. 다음과 같은 작업을 수행할 수 있습니다.
find . -print | grep -v '^\./dira' | xargs -d '\n' tar cf ../output.tar
첫 번째는 현재 디렉터리의 모든 파일 이름을 인쇄하고, 두 번째는 파일 이름에 정규식을 사용하여 원하지 않는 파일 이름을 필터링합니다. 이 정규 표현식의 문자는 ^
일치를 보장합니다.오직다음 파일에 유효합니다.시작나머지 정규식(예: 디렉터리 dira
및 해당 파일 또는 하위 디렉터리)과 함께 사용합니다. 파이프라인의 마지막 명령은 처음 두 명령의 출력을 읽고 이를 tar의 명령줄로 변환하여 아카이브에 추가할 파일 목록을 tar에 제공합니다.
답변3
/sbin만 제외하려고 하면 /usr/sbin 제외가 표시되는 이유는 무엇입니까?
man tar
:(http://linux.die.net/man/1/tar)보여주다:
--exclude=PATTERN
exclude files, given as a PATTERN
DIR은 아니지만 PATTERN이며 /sbin은 /usr/sbin과 일치합니다.
이에 대해 수행할 수 있는 작업은 제외된 DIR에 DIR을 포함하는 것입니다.:
먼저 tar를 실행하고 /sbin을 제외하고(/usr/sbin도 제외) 출력을 archive.tar 파일로 보낸 다음, APPEND 옵션을 사용하여 archive.tar 파일에 /usr/sbin을 추가합니다.
tar -cf archive.tar / --exclude=/sbin #### Partial Contents
tar -Af archive.tar /usr/sbin #### Contains everything you want