ディスク容量の約70%を占めるファイルがあり、.tar
同じディスクに解凍する必要があります。このtar
コマンドには、プロセス中に解凍されたファイルを削除してスペースを消費しなくなるオプションはありますか?この--delete
オプションを使用すると、アーカイブから特定のファイルを削除できるようになりますが、抽出した最後のファイルを常に削除できるようにする.tar
方法はありますか?tar
これにより、解凍されたファイルのサイズが増加するにつれて、.tar
サイズが最終的にゼロに減少します。
また、プロセスが中断された場合、解凍されたファイルのみが存在するため、中断された部分から続行できます.tar
。
ベストアンサー1
#! /bin/bash
test ! -e "$1" && echo "Run with a tar archive" && exit
tar --list -f "$1" | tac | while IFS= read -r fname; do
test "${fname: -1}" = '/' && continue # skip directories
tar --extract -f "$1" "$fname" || exit 1 # let's stop in case we can't extract a file
tar --delete -f "$1" "$fname" || exit 2 # just in case
done
test "$?" = "0" && tar xf "$1" # restore directories timestamps
tac
ファイルを削除した後、tar がアーカイブ全体を書き換える必要がないように、ファイルの順序を変更するために使用されます。 tar はアーカイブを切り捨てるだけです。いくつかのファイルに対してスクリプトをテストしました。小さなファイルが多く含まれているアーカイブの場合、非常に遅くなる可能性がありますが、かなりうまく機能します。
"${fname: -1}"
ファイル名の最後の記号を抽出します。スラッシュの場合はディレクトリなのでスキップします。ポータブルバージョンのレビューを確認してください。