解凍中にファイルのすでに解凍された部分を削除する方法があるかどうか疑問に思っています。圧縮ファイルの外部バックアップがあるので、データが失われる心配はありません。ファイルはbz2です。ドライブで使用できるのは50GBしかなく、圧縮ファイルは33 GBであるため、これを実行しようとしています。抽出中にファイルの一部を削除できない場合は、解凍されたファイル用の十分なスペースがありません。
これを回避するために私ができることは他にもありますが、私が上で述べたことが可能かどうか知りたいです。
解凍中にファイルのすでに解凍された部分を削除する方法があるかどうか疑問に思っています。圧縮ファイルの外部バックアップがあるので、データが失われる心配はありません。ファイルはbz2です。ドライブで使用できるのは50GBしかなく、圧縮ファイルは33 GBであるため、これを実行しようとしています。抽出中にファイルの一部を削除できない場合は、解凍されたファイル用の十分なスペースがありません。
これを回避するために私ができることは他にもありますが、私が上で述べたことが可能かどうか知りたいです。
一般に、ファイルの最初の部分を削除することはできません。切り捨てることができるのは、ファイルの最後の部分だけです。
ただし、新しいLinuxカーネルは、システムコールを使用して、特定のファイルシステムのファイルに穴を開けることをサポートしています。同じ目的で使用できる対応するユーティリティがありますが、そのユーティリティに含まれる穴あけサポート用のパッケージの比較的新しいバージョン(2.21以降)が必要です。fallocate()
util-linux
穴あけはまだ比較的新しく、カーネルのバグがまだポップアップしていることに注意してください。ファイルシステムをクリーンアップしてスペースを解放する方がよい場合があります。
私があなたの言うことを正しく理解しているなら、あなたはそれらが読み取られ、解凍されそして書かれたら、圧縮されたファイルの最初の部分を削除したいと思うでしょう。
Unixでは、ファイルの残りの部分を書き直さずにファイルの最初の部分を削除する方法がないため、これは一般に不可能です(書き直さずにファイルの最後から切り捨てることは可能ですが、目前の問題は解決しません)。ただし、穴の概念を持つファイルシステムはオプションかもしれません。
ただし、33個の1GBのzipファイルなど、より小さな圧縮ファイルを作成できる場合もあります。そうすれば、すでに解凍したファイルを簡単に削除できます。
最も明白な解決策は、解凍された出力を処理して、出力で必要なものを探すフィルターを作成することです。
bunzip2 -c compressedfile.bz2 | yourfilterprogram
-c
bunzip2をstdoutに解凍するように指示します。
この手法を使用すると、非圧縮ファイルはディスクにまったく保存されません。