web-dev-qa-db-ja.com

限られたストレージで元のディレクトリを圧縮して削除する

3 TB外付けハードドライブに、2.7 TB比較的小さなファイルを含むディレクトリがあります。この2.7を圧縮したいTBディレクトリを削除して、圧縮バージョンのみを保持します。問題は、圧縮されていないディレクトリを最初にZip、次にrmするための十分なストレージがないことです。

この問題を回避する方法はありますか、または操作のためにさらに多くのストレージを取得する必要がありますか?

6
Remi.b

Tarの--remove-files引数を試すことができます。ディレクトリFOOのすべてを圧縮したい場合は、次のようにします:tar -czf FooCompressed.tar.gz --remove-files FOO

議論は説明した:

  • c:TARを作成する
  • z:GZIPを使用して圧縮します。BZIP2の場合は-jに、LZMA(xz)の場合は-Jに切り替えることができます
  • f:STDOUTの代わりにファイルに出力
  • 削除ファイル:自明
3
Dalvenjia

ディレクトリ内の最大のファイルが300GB(空き容量)未満の場合、最も簡単なオプションは、アーカイブを作成するのではなく、ファイルを個別に圧縮することです。何かのようなもの

find directory -type f \! -name '*.xz' -print 0 | xargs -0 xz -9

圧縮レベル9でdirectoryを使用してxzのすべての非圧縮ファイルを圧縮します。これにより、ファイルが1つずつ対応する圧縮バージョンに置き換えられ、.xz拡張子が追加されます(したがってfoo.txtfoo.txt.xzになります)。

実際、これは、利用可能な空き容量よりも小さいファイルが十分にある限り、最大のファイルが利用可能な空き容量よりも大きい場合でも機能します。小さなファイルを圧縮することから始めます。 (うまくいけば)最大のファイルを処理するのに十分な空き領域があること。

1
Stephen Kitt

私は通常Zipファイルを作成することはないので、私はエキスパートではありませんが、デフォルトではZipのように見えますが、ファイルをアーカイブに追加するだけなので、(nested-rmコマンドが含まれている可能性があります危険-データを危険にさらす前に自分自身をテストしてください):ディレクトリ内のfor f in $(ls --sort=size --reverse); do Zip -9 archive.Zip $f; rm $f; done、おそらくそれを実行できます。

  • c:TARを作成する
  • z:GZIPを使用して圧縮します。BZIP2の場合は-jに、LZMA(xz)の場合は-Jに切り替えることができます。
  • f:STDOUTの代わりにファイルに出力
  • 削除ファイル:自明

ステージ1〜3で何かが発生し、ステップ4で元のファイルがすべて失われる

0
Dmitry