タルボールを作成するときに別々のファイルリストを生成できますか?

タルボールを作成するときに別々のファイルリストを生成できますか?

バックアップに使用するときに、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

tar2番目の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に送信する

関連情報