프로세스가 시작된 후 Tar 아카이브 프로세스에서 특정 파일 삭제

프로세스가 시작된 후 Tar 아카이브 프로세스에서 특정 파일 삭제

대용량 디렉터리(예: 백업/OS 재설치에 사용되는 기본 폴더)를 압축할 때 GB 단위의 비디오와 같은 특정 대용량 파일을 제외할 수 있는 경우가 많습니다. 그러나 홈 폴더의 모든 기능으로 인해 시작하기 전에 제외(--exclude 사용)하는 데 유용할 수 있는 모든 파일을 기억하는 것은 종종 비현실적입니다. 나는 tar에 줄 수 있는 어떤 파일이든 종료하고 다음 파일로 이동하여 종료된 파일을 아카이브 외부에 남겨두도록 지시하는 일종의 입력을 찾고 있습니다. Control-C와 비슷하지만 전체 프로세스를 중지하는 대신 현재 파일만 중지합니다.

구체적으로는 장기 실행 tar -cvf또는 tar -cvzf.-v

어떤 종류의 GUI 도구를 사용하는 것은 옵션이 아닙니다. tar는 일반적으로 재설치 전에 손상된 시스템의 최소(CLI 전용) 환경에서 실행되기 때문입니다. 제가 질문하고 있는 구체적인 사례는 다음과 같습니다.

답변1

나는 그것이 가능하다고 생각하지 않지만 tar에서 자동으로 큰 파일을 제외할 수도 있습니다. 예를 들어,

find mydir ! -type f -o \( -type f -size -1000k \) | tar cv --no-recursion -T - -f /tmp/tar 

1000k보다 큰 파일은 저장되지 않습니다.


다음은 대용량 파일 보관을 중지하기 위해 'n'개의 응답을 대화식으로 요청하는 스크립트입니다.

find mydir \( -type f -size +1000k -exec /tmp/biggie {} \; \) -o -print |
tar c --no-recursion -T - -f /tmp/tar

/tmp/biggie스크립트는 어디에 있나요?

#!/bin/bash
if ! read -t 10 -n 1 -p "$1 ok ?" reply || [ n != "$reply" ]
then echo >&2
     echo "$1"
else echo " ignoring $1" >&2
fi

10초당 1문자의 제한 시간(-n)과 파일 이름을 프롬프트(-p)로 지정하여 bash 관련 읽기를 수행합니다. 10초 이내에 "n"을 입력하면 해당 파일이 무시됩니다.

답변2

물론 프로그램에서 요청하지 않는 한 실행 중인 프로그램에 초기 설정을 변경하라고 지시할 수는 없습니다.

대용량 파일 작업을 피하고 싶다면 star이미 사용하고 있는 비표준 tar 대신 tar를 사용하는 것이 좋습니다.

star -c -f out.tar -find startdir -size -1g

예시에서는 1G 대신 적절한 크기를 사용하세요.

이는 별도의 파인더 호출을 사용하는 것보다 훨씬 빠르며 파일 이름에 흥미로운 문자가 포함되는 부작용을 방지합니다.

관련 정보