
私は Linux サーバーのスペースを節約しようとしており、サブフォルダーに 22 GB の画像を含むフォルダーがありました。
そこで圧縮することにしました。
まずtarを使いました:
tar -zcf folder.tar folder
次にgzip
gzip folder
最後に、念のため、bzip2
bzip2 folder
そして、これらすべてを終えても、合計はfolder.tar.gz.bzip2
22 GB になりました。精度を上げると、1% のスペース節約になります。
ここで何か間違ったことをしたのでしょうか? 1% よりも何倍も節約できると期待していました!
他にどのような方法でファイルを圧縮できますか?
答え1
圧縮比はとても圧縮するものによって異なります。テキストが非常にうまく圧縮される理由は、同じバイナリ空間で表現できる数値の全範囲を完全に利用しきれていないからです。そのため、そのような形式 (圧縮ファイルなど) では、テキスト エンコーディングでは意味を持たないバイナリ数値をすべて使用することで、同じ情報をより少ないスペースに保存でき、文字の進行全体を 1 バイトで効果的に表現できるため、優れた圧縮率が得られます。
ファイルがすでに圧縮されている場合、通常、再度圧縮してもあまりメリットはありません。実際に追加のスペースを節約できた場合は、最初の圧縮アルゴリズムがあまり良くなかったことを示している可能性があります。質問の性質から判断すると、これらの多くはメディア ファイルであり、すでに圧縮されている (ただし、解凍速度を優先するアルゴリズムを使用) ため、あまりメリットが得られないと考えられます。石から血を絞り出すようなシナリオです。つまり、情報を失うことなく作成できる範囲で、すでに最小サイズになっています。
スペースが心配な場合は、「bzip2 -9」を実行するだけで十分です。ただし、XZ の比率については良い話を聞きました。私は自分で XZ を使用したことはありません (他の人のものを解凍する場合を除く) が、bzip2 よりも比率は良いものの、圧縮/解凍に少し時間がかかるようです。
答え2
圧縮に失敗したのは、データがすでに高度に圧縮されており、それ以上のメリットがないためであり、詳細な説明については他の回答を参照してください。ただし、非可逆圧縮とは対照的に無損失の以前試したように、画像を大幅に圧縮できます。ただし、データが切り取られているため、元に戻すことはできません。
以下は、imagemagick を使用してすべての JPEG 画像を再圧縮する例です。これによりファイルが上書きされることに注意してください。
find image_directory -type f -name "*.jpg" -exec mogrify -quality 75% {} \+
答え3
最も一般的な画像形式 (jpg、png、gif など) はすでに圧縮されているため、節約できる量は多くありません。1% 程度が妥当でしょう。
圧縮アルゴリズムは圧縮されたデータにはメリットがなく、フォーマット (例: gzip) によって出力にヘッダーや構造情報を追加する必要があるため、さらに圧縮を追加すると、結果が (わずかに) 大きくなる可能性があります。
申し訳ありません!pngを使用している場合は、次の方法でファイルを縮小してみてください。pngクラッシュ。
答え4
指摘する価値のあるもう 1 つのポイント: 複数の圧縮ツール/アルゴリズムを使用すると、最終結果のサイズが膨張し、必要以上に大きくなる可能性があります。つまり、100 GB を 10 GB に圧縮してから再度圧縮しようとすると、圧縮対象と圧縮方法によっては、最終的に約 15 GB になる可能性があります。
tar cjvf container.tar.bz2 /target
個人的には、二重圧縮によって節約されるディスク容量がごくわずかであるという理由だけで、それ以上のことはしません。