Putting the data passed to xargs twice in one line

我是研究僧i 提交于 2019-12-12 14:53:26

问题


tmp-file contains:

database_1
database_2
database_3

I want to run a command like "mysqldump DATABASE > database.sql && gzip database.sql" for each line in the above file.

I've got as far as cat /tmp/database-list | xargs -L 1 mysqldump -u root -p

I guess I want to know how to put the data passed to xargs in more than once (and not just on the end)

EDIT: the following command will dump each database into its own .sql file, then gzip them.

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

回答1:


In your own example you use && to use two commands on one line - so why not do

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

if you really want to do it all in one line using xargs only. Though I believe that

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

would make more sense.




回答2:


If you have a multicore CPU (most of us have these days) then GNU Parallel http://www.gnu.org/software/parallel/ may improve the time to run:

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 will run as many jobs in parallel as you have CPU cores.



来源:https://stackoverflow.com/questions/1375905/putting-the-data-passed-to-xargs-twice-in-one-line

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!