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