6GB TARファイルを別々の1.9GB TARファイルに分割

6GB TARファイルを別々の1.9GB TARファイルに分割

私のディレクトリには、6.7 GBのサイズのファイルが28,000個ありますaaa/input

aaa/output各TARファイルが1.9 GBを超えないようにディレクトリにTARファイルを作成する必要があるため、以下のように28,000個のファイルを4つのTARファイル(6.7/1.9)に圧縮する必要があります。

Log_(current date)_01.tar
Log_(current date)_02.tar
...
etc.

各タールボールを1.9GB未満に保ちます。

Unixスクリプトを使用してこれを行う方法はありますか?

ベストアンサー1

tar以下を組み合わせてsplitこれを達成できます。

tar cf - aaa/input | split --bytes=1900m --filter='gzip > $FILE.gz' --numeric-suffixes - ./Log-

このコマンドは、tarstdoutのアーカイブを生成し、出力をsplit1900MBごとに分割するコマンドにパイプし、gzipを介してデータをフィルタリングし、stdinを入力(the -)として使用し、出力をプレフィックスとともに現在のディレクトリに配置します。Log-

出力は次のとおりです。

./Log-00.gz
./Log-01.gz
..

split入力は1900Mに分割され、圧縮後は小さくなるため、ファイルサイズは小さくなります。

またはあなたは使用することができます

printf 'n Log-%02d.tar\n' {2..4}|tar cf Log-01.tar -ML1900m aaa/input

アーカイブを作成します。

nコマンドの最初のコマンドは、次のアーカイブの新しい名前をprintf表します。tarこれが範囲が2から始まる理由です。

通常、tar が新しいアーカイブを求めるメッセージを表示すると、次のようになります。

Prepare volume #2 for '<my tar file>' and hit return:

押すと、?次のショートカットメニューが表示されます。

 n name        Give a new file name for the next (and subsequent) volume(s)
 q             Abort tar
 y or newline  Continue operation
 !             Spawn a subshell
 ?             Print this list

おすすめ記事