tar: 압축 후 파일을 제거하지만 디렉토리는 유지하는 방법

tar: 압축 후 파일을 제거하지만 디렉토리는 유지하는 방법

나는 tar가 완전한 디렉토리를 압축하기를 원합니다.

tar cvjf dir.tbz dir

하지만 모든 파일을 삭제하도록 하세요.

tar cvjf dir.tbz dir --remove-files

그러나 이것은 ./dir도 제거합니다. 그래서 포장하기 전에 디렉토리에 CD를 넣으려고했습니다.

tar cvjf dir.tbz --remove-files -C dir .

그러나 그것은 여전히 ​​./dir을 제거합니다. 왜 tar 작업 디렉토리 자체를 삭제해야 합니까? 나에게는 이해가 되지 않는 것이 무엇입니까? 전체 디렉터리를 삭제하지 않고 전체 디렉터리를 압축하고 압축한 후 파일을 제거할 수 없나요?

./dir에 지속적으로 파일을 생성하고 매 시간마다 모든 파일을 압축한 다음 압축된 파일을 제거하려는 프로세스가 실행 중입니다. tar 후에 mkdir을 삭제하고 삭제할 수 있지만 mkdir이 디렉토리를 다시 생성하기 전에 새 파일을 쓰려고 할 때 파일을 생성하는 다른 프로세스가 어려움을 겪을 수 있습니다.

답변1

다음과 같이 시도해 볼 수 있습니다.

find dir -type f -mmin +1 | xargs -I{} sh -c 'tar rvf dir.tar {} && rm {}'
bzip2 dir.tar && mv dir.tar.bz2 dir-$(date +%F-%T).tbz

현재 명령보다 조금 더 복잡하지만 작동하며 경쟁 문제가 있다고 생각하지 않습니다(파일이 1분보다 긴 간격으로 여러 번 기록되지 않는 경우).

이 명령은 1분 이상 된(현재 기록되지 않은) find모든 파일을 찾습니다 . dir그런 다음 이 목록은 로 파이프되어 xargs각 항목을 차례로 파일에 추가합니다 dir.tar. 파일이 tar 파일에 성공적으로 추가되면 원본이 제거됩니다. 한 번에 하나씩 수행하면 파일 수가 많은 경우 명령줄이 너무 길어지는 문제를 피할 수 있습니다. 마지막으로 tar 파일을 압축하고 이름을 바꿀 수 있습니다.

답변2

이에 대한 해결 방법은 다음과 같습니다.

나는 디렉토리에 CD를 넣고 ./*를 사용하여 내용을 tar한 다음 삭제하는 스크립트를 작성했습니다. 나는 단지 -C가 동일한 작업을 수행하여 하나의 명령줄에 포함할 수 있기를 바랐지만 그렇지 않습니다.

#!/bin/bash

cd /path/to/dir
tar cvjf dir.tbz ./* --remove-files

작동해야합니다.

관련 정보