tar 압축 후 디렉토리 삭제

tar 압축 후 디렉토리 삭제

전체 디렉토리 트리를 압축하려고 하는데, find로 찾은 모든 디렉토리 대신 하나의 .tar.bz2 파일만 남겨 두었습니다. 목적은 매주 이 작업을 수행하기 위한 cronjob을 만드는 것입니다.

zip에 디렉터리를 나열하는 데 성공적으로 사용한 명령은 다음과 같습니다.

find rootDirectory/ -mindepth 2  -type d  -not -name '*.bz2'

전체 작업을 압축하고 수행하는 데 사용하는 것은 다음과 같습니다.

find rootDirectory/ -mindepth 2  -type d  -not -name '*.bz2' -exec  tar --remove-files -cjf ./{}.tar.bz2 ./{}  \ ;

잘 작동하지만 다음과 같이 압축된 각 디렉터리에 대해 오류가 발생합니다.

find: ‘rootDirectory/directory2/02-09-2020-183833-700’: No such file or directory

rootDirectory/directory2/02-09-2020-183833-700.tar.bz2에서 원하는 결과를 얻었지만 실행하는 동안 오류를 제거하고 싶습니다. 내가 뭘 잘못했나요? .

미리 감사드립니다!

답변1

나는 아카이브가 생성된 후에 --remove-files소스 디렉토리가 삭제되었다고 가정합니다. tar유틸리티 find는 디렉토리가 사라진 것을 알지 못하며 검색 기준과 일치하는 다른 콘텐츠를 찾기 위해 디렉토리에 계속 들어가려고 시도합니다.

이런 방식으로 아카이브를 생성하는 디렉터리를 입력하지 않으려면 --prune명령 끝에 다음을 추가하세요 find.

find rootDirectory/ -mindepth 2  -type d  ! -name '*.bz2' \
    -exec  tar --remove-files -cjf {}.tar.bz2 {}  \; --prune

주요 --prune지침 find은 조사할 경로에서 해당 검색 경로를 제거하여 해당 디렉터리(더 이상 존재하지 않음)에 들어가려고 시도하지 않도록 하는 것입니다.

이 경우에는 에서 find생성할 것이므로 아마도 그럴 필요가 없을 것입니다 . 이는 루프를 사용하여 쉽게 수행할 수 있습니다.tarrootDirectory

for dir in rootDirectory/*/*/; do
    tar --remove-files -cj -f "${dir%/}.tar.bz2" "$dir"
done

여기서 유일한 차이점은 숨겨진 이름이 있는 디렉터리를 놓친다는 것입니다.

관련 정보