バックアップに使用するときに、tar
バックアップtarballと共に保存されるアーカイブに含まれる別々のファイルのリストを作成したいと思います。
また、tarのエラーメッセージをログに保存できるようにしたいです。
あまり良くない解決策:
tar --verbose
...&> filelist.txt
しかし、これは1つのファイルにエラー+ファイルのリストを提供します。tar --list
タールボールを作成した後。しかし、時間がかかります。
初めてボールを転がしたときにファイルのリストを取得して別のファイルに保存する方法はありますか?
答え1
tar --list
速度が遅いので気に入らないと言われました。私はこれが大きなタールボールなので、全体の内容を再スキャンする必要があると思います。この場合、作成時にチェックを実行すると、より良いパフォーマンスが得られます。
tar -c /input/directory | tee output.tar | tar -t > filelist.txt
これはtee
結果のtarballを1つはファイルに、もう1つはtar -t
。
アーカイブをgzipに圧縮するには:
tar -c /input/directory | tee >(gzip > output.tar.gz) | tar -t filelist.txt
tar
2番目のtarが再度解凍する必要があるときにCPUサイクルが無駄になるため、1番目の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に送信する