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

在您自己的示例中,您使用 && 在一行上使用两个命令 - 那么为什么不这样做

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

如果您真的想仅使用 xargs 在一行中完成所有操作。虽然我相信

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 回答