.tar에서 이미 압축을 푼 파일을 제거할 수 있습니까?

.tar에서 이미 압축을 푼 파일을 제거할 수 있습니까?

내 디스크 공간의 약 70%를 차지하는 파일이 있는데 .tar동일한 디스크에 압축을 풀어야 합니다. 이 tar명령에는 프로세스 중에 이미 압축을 푼 파일을 제거하여 더 이상 공간을 차지하지 않도록 하는 옵션이 있습니까? 이 --delete옵션은 아카이브에서 특정 파일을 제거할 수 있는 것 같은데 , 방금 압축을 푼 마지막 파일을 항상 제거하도록 .tar지시하는 방법이 있습니까 ? tar이런 식으로 압축을 푼 파일 크기가 증가하면 크기 .tar는 결국 0으로 줄어듭니다.

또한 프로세스가 중단된 경우 압축이 풀린 파일만 .tar.

답변1

#! /bin/bash
test ! -e "$1" && echo "Run with a tar archive" && exit
tar --list -f "$1" | tac | while IFS= read -r fname; do
    test "${fname: -1}" = '/' && continue # skip directories
    tar --extract -f "$1" "$fname" || exit 1 # let's stop in case we can't extract a file
    tar --delete  -f "$1" "$fname" || exit 2 # just in case
done
test "$?" = "0" && tar xf "$1" # restore directories timestamps

tac파일의 순서를 바꾸는 데 사용되므로 tar는 파일을 삭제한 후 전체 아카이브를 다시 쓸 필요가 없습니다. tar는 아카이브만 자르면 됩니다. 몇 개의 파일에 대해 스크립트를 테스트했습니다. 잘 작동하지만 작은 파일이 많은 아카이브의 경우 속도가 매우 느릴 수 있습니다.

"${fname: -1}"파일 이름의 마지막 기호를 추출합니다. 슬래시인 경우 디렉터리이므로 건너뜁니다. 휴대용 버전에 대한 설명을 확인하세요.

관련 정보