
.tar
ディスク容量の約 70% を占めるファイルがあり、同じディスクに解凍する必要があります。tar
コマンドには、プロセス中にすでに解凍されたファイルを削除して、それ以上容量を占有しないようにするオプションがありますか? オプションでは、アーカイブ--delete
から特定のファイルを削除できるようです.tar
が、最後に解凍されたファイルを常に削除するように指示する方法はありますかtar
? この方法だと、解凍されたファイルのサイズが大きくなるにつれて、サイズは.tar
最終的に 0 まで減少します。
さらに、プロセスが中断された場合でも、解凍されたファイルのみが .ini 内に残っているため、中断したところからプロセスを続行できます.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 はファイルを削除した後にアーカイブ全体を書き直す必要がなくなり、アーカイブを切り捨てるだけで済みます。このスクリプトをいくつかのファイルでテストしましたが、問題なく動作しますが、小さなファイルが多数含まれるアーカイブでは非常に遅くなる可能性があります。
"${fname: -1}"
ファイル名の最後の記号を抽出します。スラッシュの場合はディレクトリなので、スキップします。移植可能なバージョンについてはコメントを確認してください。