大容量.tgzからファイルを効率的に削除する

大容量.tgzからファイルを効率的に削除する

gzipで圧縮されたtar-ballcompressedArchive.tgz(+ 100ファイル、+ 5GBの合計)があるとしましょう。

指定されたファイル名パターン(たとえば、プレフィックス* .jpg)に一致するすべてのエントリを削除し、残りをgzip:ed tar-ballに保存する最も簡単な方法は何ですか?

古いアーカイブを置き換えたり、新しいアーカイブを作成したりするのが最も速いことは重要ではありません。

ベストアンサー1

GNUを使用すると、tar次のことができます。

pigz -d < file.tgz |
  tar --delete --wildcards -f - '*/prefix*.jpg' |
  pigz > newfile.tgz

そしてbsdtar

pigz -d < file.tgz |
  bsdtar -cf - --exclude='*/prefix*.jpg' @- |
  pigz > newfile.tgz

pigzマルチスレッドバージョンですgzip)。

次のようにファイル自体を上書きできます。

{ pigz -d < file.tgz |
    tar --delete --wildcards -f - '*/prefix*.jpg' |
    pigz &&
    perl -e 'truncate STDOUT, tell STDOUT'
} 1<> file.tgz

しかし、これは非常に危険です。特に、結果が元のファイルよりも圧縮されていない場合(この場合、2番目のファイルは最初のファイルがまだpigz読み取られていないファイル領域を上書きする可能性があります)。

おすすめ記事