tar를 생성할 때 빈 디렉토리를 제외할 수 있습니까?

tar를 생성할 때 빈 디렉토리를 제외할 수 있습니까?

다음과 같은 백업 명령이 있습니다.

tar cvpzf /backup/incremental-$now.tar.gz --after-date='1 day ago' -C / etc/ home/ root/  --exclude-from=/root/exclusion_list.txt --warning=no-file-unchanged > /backup/log-$now.txt 2>&1

문제는 빈 폴더도 포함되어 있는데, 그 안의 모든 파일이 변경되지 않아 증분 백업에 포함되지 않는다는 것입니다. 나는 이것을 피할 수 있는 방법을 찾고 있지만 내가 찾은 유일한 솔루션(find 결과를 xargs를 사용하여 인수로 tar로 파이핑)은 폴더가 하나 있을 때에만 작동합니다. 폴더가 세 개 있습니다.

답변1

기본적으로 tar는 빈 디렉토리를 건너뛰는 방법을 제공하지 않습니다. 즉, 수행해야 할 작업을 수행하기 위해 허공에서 간단한 쉘 스크립트를 꺼내는 것은 그리 많은 작업이 아닙니다.

여기필요가 생겼을 때 똑같은 문제에 대한 해결책을 찾은 포럼 토론입니다.

주요 업데이트: 먼저 저의 엉성한 복사-붙여넣기에 대해 진지하게 사과해야 합니다. 심야글이라 제 정신이 한창이 아니었는데...

올바른 포럼 게시물은 다음과 같습니다.여기. 실제로는 같은 사람이 다른 포럼에서 같은 질문을 하고 완전히 다른 답변을 얻는 것입니다. 문제가 발생했을 때 두 가지를 모두 북마크에 추가하고 잘못된 링크에 대한 링크를 제공했습니다.

실제로 여기에 표시된 것은 find 명령의 출력을 tar로 "파이프"하는 방법입니다. 그 사람이 묻는 "보다 새로운 것"에 관한 모든 것을 무시해야합니다.

대신 필요한 찾기 부분은 다음과 같습니다.

find . -type d ! -empty | ...

물론 시작하려면 점(".")을 find/tar가 필요한 경로로 바꿔야 합니다. 파이프 이후 두 번째 링크(올바른 링크)에 따라 tar 명령을 계속 실행합니다.

제가 세심하게 신경쓰지 못한 부분으로 인해 물의를 일으켰다면 다시 한번 깊이 사과드립니다.

답변2

작은 파일 세트만 변경한 경우에만 작동하는 또 다른 방법은 다음과 같습니다.

tar cvzf [...] `find . -mtime -1 -type f`

변경 사항이 많은 경우 변경된 파일 목록을 파일로 덤프하고 tar 명령에 --files-from 매개 변수를 사용할 수 있습니다.

find . -mtime -1 -type f > /tmp/changed.txt
tar cvzf [...] --files-from=/tmp/changed.txt

아니면 한 줄로

find . -mtime -1 -type f | tar cvzf [...] --files-from=/dev/stdin

관련 정보