強制終了されたtarコマンドを再開するにはどうすればよいですか


11

私は:tar -cvfをやっていました、そして私はそれを殺さなければなりませんでしたctrl-C。a 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プロセスを再起動するよりも速いと思いますか?
タイラー

2

最善の解決策は、tarファイルを削除して、先頭にとnohupを付けてプロセスを再開すること&です。または、それを実行tar -tfvして、新しいの除外として使用することもできますtar -cvf


2
tar -cvf既存のファイルを上書きします。もしかしてtar -rvf?また、アーカイブに書き込まれた最後のファイルはおそらく不完全でした。
Gilles 'SO-悪をやめ

したがって、アイデアは、すでにtarballにあるファイルのリストから、おそらく不完全な最後のものを除いたものにすることです。そして、tar -rvf
mthpvg


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.