디스크 공간의 약 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}"
파일 이름의 마지막 기호를 추출합니다. 슬래시인 경우 디렉터리이므로 건너뜁니다. 휴대용 버전에 대한 리뷰를 확인하세요.