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