백업에 사용될 때 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로 보내기