私のディレクトリには、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-
このコマンドは、tar
stdoutのアーカイブを生成し、出力をsplit
1900MBごとに分割するコマンドにパイプし、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