3

tmp ファイルには以下が含まれます。

データベース_1
データベース_2
データベース_3

上記のファイルの各行に対して、「mysqldump DATABASE > database.sql && gzip database.sql」のようなコマンドを実行したいと考えています。

私は cat /tmp/database-list | まで持っています。xargs -L 1 mysqldump -u root -p

xargs に渡されたデータを複数回(最後だけでなく)配置する方法を知りたいと思います

編集:次のコマンドは、各データベースを独自の .sql ファイルにダンプし、gzip します。

mysql -u root -pPASSWORD -B -e 'show databases' | sed -e '$!N; s/Database\n//' | xargs -L1 -I db mysqldump -u root -pPASSWORD -r db.backup.sql db; gzip *.sql
4

2 に答える 2

3

あなた自身の例では、&&を使用して1行で2つのコマンドを使用します。

cat file | xargs -L1 -I db mysqldump db > db.sql && cat file | xargs -L1 -I db gzip database.sql

本当にxargsのみを使用してすべてを1行で実行したい場合。私はそれを信じていますが

cat file | xargs -L1 -I db mysqldump db > db.sql && cat file; gzip *.sql

もっと理にかなっているでしょう。

于 2009-09-03T22:01:14.000 に答える
1

マルチコア CPU を使用している場合 (最近はほとんどの人が使用しています)、GNU Parallel http://www.gnu.org/software/parallel/を使用すると、実行時間が短縮される可能性があります。

mysql -u root -pPASSWORD -B -e 'show databases' \
| sed -e '$!N; s/Database\n//' \
| parallel -j+0 "mysqldump -u root -pPASSWORD {} | gzip > {}.backup.sql"

-j+0 は、CPU コアと同じ数のジョブを並行して実行します。

于 2010-06-10T19:22:42.990 に答える