圧縮tarファイルを作成し、バックアップ用に外部サーバーにアップロードする単純なbashスクリプトがあります。サーバー上のファイルに加えて、mysqlデータベースのいくつかのダンプも含めたいと思います。
ディスクスペースの制約のため、tarアーカイブを作成する前に、ディスク上のファイルのデータベースダンプを事前に作成することはできません。私がしたいことは何とかダンプをtarに直接転送することです。
私の最初の試みは、名前付きパイプを作成し、tarにそれを読み込むことでした。ダンプするデータベースごとにmysqldumpプロセスのパイプを作成します。
mkfifo $DB.sql
mysqldump --result-file=$DB.sql $DB &
echo $DB.sql >>$FILELIST
バックアップするすべてのファイルのリストを作成した後:
tar c -P --files-from=$FILELIST | gzip | curl ...
私はこれが期待どおりに機能しないことがわかりました。 tar はパイプの内容を読み取る代わりに、単にアーカイブにパイプエントリを作成します。
動作を変更する tar スイッチが見つかりません。 tarがパイプをファイルであるかのように読み取る方法はありますか?それとも、この種の状況を処理できる他のユーティリティはありますか?
答え1
答え2
これがあなたが望むものであるかどうかはわかりません。パイプから読み取るとは、標準入力から読み取ることを意味します。これは、標準入力が表示されるtar xf -
(または圧縮された)ストリームを使用tar xzf -
して行われます。-
標準出力に書き込むのと似ています:(tar cf -
またはtar czf -
)。