将数据传递给xargs一行两次

时间:2009-09-03 20:55:46

标签: mysql mysqldump xargs

tmp-file包含:

database_1
database_2
database_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

2 个答案:

答案 0 :(得分: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

会更有意义。

答案 1 :(得分: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内核并行运行多个作业。