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
読み取られていないファイル領域を上書きする可能性があります)。