回答:
この方法では、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を再開します。
最善の解決策は、tarファイルを削除して、先頭にとnohup
を付けてプロセスを再開すること&
です。または、それを実行tar -tfv
して、新しいの除外として使用することもできますtar -cvf
。
tar -cvf
既存のファイルを上書きします。もしかしてtar -rvf
?また、アーカイブに書き込まれた最後のファイルはおそらく不完全でした。
tar -rvf
?
不完全な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アーカイブに直接追加しないでください。