私は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 -
tar
hereにパイプされた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 .
その後、split
tarファイルサイズは100Mbsです。
split -b 100M /backups/_structure.tar.gz
これにより、xaa、xab...などの奇妙な名前のファイルが生成されます。
元のファイルを再取得するには、次のcat
すべてのファイルを持っている必要があります。
cat xaa xab xac... > _structure.tar.gz