単一のexecコマンドでtar.gzを複数のファイルに分割するには? [コピー]

単一のexecコマンドでtar.gzを複数のファイルに分割するには? [コピー]

私はUnix / Linuxについて何も知りません。私は主にWebプログラマーです。

私のコードで次のコマンドを実行します。

exec("tar -caf '/backups/_structure.tar.gz' --ignore-failed-read -C /source .");

このコードは、私のディレクトリにあるすべてのエントリのファイルバックアップを作成し、/sourceそのディレクトリに保存します/backup。このコードは私のファイルが非常に大きい場合を除いてうまくいきます。

tarファイルを100MBのセグメントに分割したいです。これを行うには、この行に何を追加する必要がありますか?それについての内容を読みました| split -b 100MBが、どこに入れるべきかわかりません。混乱しています。

答え1

tar -cf - --ignore-failed-read -C /source . | gzip |
  split -b 100M - /backups/_structure.tar.gz.

要点tarは、一時ファイルを保存する必要なしにインスタントで圧縮し、インスタントで分割し、ネットワーク経由で送信できるストリームを送信することです。

-f -tarhereにパイプされたstdoutのアーカイブを送信するように指示し、gzipすぐに圧縮して送信しますsplit

-split標準入力から入力を受け取るように指示します。 2番目のパラメータはブロックプレフィックスです。デフォルトが気に入らない場合は、マニュアルページを参照してsplitこれらのブロックの命名スキームを変更する方法を学びます。

繰り返しますが、このアーカイブを抽出するためにファイル全体を保存する必要はありませんtar.gz

cat _structure.tar.gz.* | gunzip | (cd /dest && tar xf -)

答え2

まず、tarファイルを作成します。

tar -caf '/backups/_structure.tar.gz' --ignore-failed-read -C /source . その後、splittarファイルサイズは100Mbsです。

split -b 100M /backups/_structure.tar.gz

これにより、xaa、xab...などの奇妙な名前のファイルが生成されます。

元のファイルを再取得するには、次のcatすべてのファイルを持っている必要があります。

cat xaa xab xac... > _structure.tar.gz

関連情報