パイプとxargsを使用して大容量ファイルを圧縮することはできません。

パイプとxargsを使用して大容量ファイルを圧縮することはできません。

次のようにmysqlバックアップファイルをパッケージ化しようとしています。

find /data/mysqldata \( ! -name "*mysql-bin*" -a ! -name "*.log" \) |
    xargs tar -zcf /data/backup.tgz

実際にこのコマンドをPopenで実行し、select-poll方式で出力が読み込まれるのを待っていましたが、tarプログラムを再起動したかのようにバックアップファイルが大きくなりすぎて、突然小さすぎる場合がありました。これは通常、ターゲットファイルが非常に大きく混乱している場合に発生します。

ベストアンサー1

GNUの使用tar:

tar -cz -f /data/backup.tgz --exclude '*.log' --exclude 'mysql-bin.*' /data/mysqldata 

あなたが経験している問題は、xargsそれをtar複数回(少なくとも2回)実行することです。バックアップファイルは、2回目の実行時にtar「縮小」(上書き)されます。

それがまさにそのことですxargs。できるだけ多くの引数を使用してユーティリティを実行し、より多くの引数(あなたのファイル名)を取得したら、リストを切り取り、ユーティリティへの他の呼び出しでリストを引き続き使用します。

質問起こったすべてのディレクトリとファイル名をに送信するため、xargs非常に長いリストが生成されます。

おすすめ記事