타르볼을 생성할 때 별도의 파일 목록을 생성할 수 있습니까?

타르볼을 생성할 때 별도의 파일 목록을 생성할 수 있습니까?

백업에 사용될 때 tar백업 tarball과 함께 저장될 아카이브에 포함된 별도의 파일 목록을 생성하고 싶습니다.

또한 tar의 오류 메시지를 로그에 저장할 수 있기를 원합니다.

그다지 좋지 않은 해결책:

  • tar --verbose... &> filelist.txt하지만 이것은 하나의 파일에 오류 + 파일 목록을 제공합니다.
  • tar --list타르볼을 생성한 후. 하지만 시간이 오래 걸립니다.

처음 공을 굴릴 때 파일 목록을 가져와서 별도의 파일에 저장할 수 있는 방법이 있나요?

답변1

tar --list속도가 느리기 때문에 마음에 들지 않는다고 말씀하셨습니다 . 나는 이것이 큰 타르볼이기 때문에 전체 내용을 다시 스캔해야 한다고 생각합니다. 이 경우 생성 시 검사를 수행하면 더 나은 성능을 얻을 수 있습니다.

tar -c /input/directory | tee output.tar | tar -t > filelist.txt

이는 tee결과 tarball을 하나는 파일로, 다른 하나는 tar -t.

아카이브를 gzip으로 압축하려면 다음을 수행하세요.

tar -c /input/directory | tee >(gzip > output.tar.gz) | tar -t filelist.txt

tar두 번째 tar가 다시 압축을 풀어야 할 때 CPU 주기가 낭비되기 때문에 첫 번째 tar에서는 gzip을 수행하지 않았습니다 . 대신, 디스크에 기록되는 tarball만 gzip으로 압축합니다.

답변2

각 파일을 tar 파일에 추가할 수 있습니다.

for f in file ...; do 
    echo "$f"
    tar rf result.tar $f
done

답변3

그러면 오류 메시지( stderr)가 파일에 저장되고 파일 목록( stdout)이 파일에 저장됩니다.

$ tar -cvf archive.tar test nonexisting 1> stdout.txt 2> stderr.txt

$ cat stdout.txt
test/
test/05.txt
test/06.txt
test/00.txt
test/01.txt
test/10.txt
test/07.txt
test/03.txt
test/02.txt
test/04.txt
test/08.txt
test/09.txt

$ cat stderr.txt
tar: nonexisting: Funktion "stat" misslyckades: Filen eller katalogen finns inte
tar: Avslutar med felstatus på grund av tidigare fel

--index-file내 질문에 대한 의견에서 John이 제안한 대로 사용하는 것도 좋을 것입니다.

tar --create \
    --verbose \
    --index-file=$fileList \
    --file $archiveFile \
    $filesystemToArchive \
    &>> $logFilename

tar 맨페이지에서:

--인덱스 파일=파일

자세한 출력을 FILE로 보내기

관련 정보