사망 한 tar 명령을 재개하려면 어떻게합니까


11

나는 : tar -cvf하고 있었고 나는 그것을 죽여야했다 ctrl-C. 나는 내가해야 할 일을 알고 Ctrl-Z나서 과제를 포 그라운드로 되돌려 놓았다 ... 그러나 그것은 이야기가 아니다.

작업을 중단 한 시점부터 다시 시작할 수 있습니까?


대상 위치에 불완전한 tar 파일이 있습니까?
Karthik T

예, 불완전한 타르가 있습니다.
mthpvg

답변:


11

이 방법은 tar 아카이브를 다시 만들고 완성 된 부분을 기존 파일에 추가합니다. 네트워크 연결을 통해 백업 할 때 유용 할 수 있습니다. INFILES의 데이터가 변경된 경우 아카이브가 손상 될 수 있습니다. 완료 후 아카이브를 테스트하십시오.

다음 줄에서 INFILES 및 OUTFILE을 올바른 이름으로 변경하십시오.

INFILES="my folder"; OUTFILE="archive.tgz"; SIZE="$(wc -c < $OUTFILE)"; tar -cz --to-stdout "$INFILES" | tail -c +$(($SIZE+1)) >> "$OUTFILE"

설명:

SIZE="$(wc -c < $OUTFILE)" # 아카이브의 현재 크기를 가져옵니다.

tar -cz --to-stdout "$INFILES" |# 아카이브 생성을 시작하고 출력을 tail명령으로 보냅니다 .

tail -c +$(($SIZE+1)) >> # $ SIZE + 1 이전의 데이터를 무시하고 나머지 $ OUTFILE 아카이브를 재개하십시오.


2
실제로 tar 디스크에 아무것도 쓰지 않기 때문에 tar 프로세스를 다시 시작하는 것보다 이것이 더 빠르다고 생각합니까?
Tyler

2

가장 좋은 해결책은 tar 파일을 삭제하고 접두사가 붙고 추가 nohup된 프로세스를 다시 시작하는 것 입니다 &. 또는이를 실행 tar -tfv하여 new에 대한 제외로 사용할 수 있습니다 tar -cvf.


2
tar -cvf기존 파일을 덮어 씁니다. 당신은 의미 했습니까 tar -rvf? 또한 아카이브에 작성된 마지막 파일이 불완전했을 수 있습니다.
Gilles 'SO- 악마 그만

따라서 아이디어는 이미 tarball에있는 파일 목록에서 아마도 불완전한 파일을 뺀 목록을 만드는 것입니다. 그런 다음 tar -rvf?
mthpvg

2

당신은 할 수 없습니다; 다시 시작하면됩니다.


1

내가 불완전한 tar아카이브를 가지고있는 경우에 내가하는 일은 아카이브에 파일 목록을 만듭니다.

tar tf archive.tar | sed -e '/\/$/d' -e x -e '/^$/d' >files-done

sed명령은 슬래시가있는 해당 행을 모두 삭제합니다.이 파일은 파일이 아닌 디렉토리이며, 디렉토리를 다시 덤프하고 해당 디렉토리에서 해당 파일을 건너 뛰고 싶습니다 (첫 번째 tar 아카이브에 이미 있음). 또한 sed마지막 파일 이름은 부분적으로 만 덤프되었을 가능성이 있으므로 마지막 파일 이름을 삭제하면 다시 아카이브됩니다.

그런 다음 files-done-X 옵션을 통해 새 tar명령으로 목록을 전달하십시오 .

tar cfvX archive2.tar files-done SOURCEDIR

새 tar 명령에서 다른 출력 파일 이름을 사용하지 않으면 부분 아카이브를 덮어 씁니다. 손상된 tar 아카이브에 직접 추가하지 마십시오.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.