将两次传递给 xargs 的数据放在一行中
tmp 文件包含:
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
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
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(2)
在您自己的示例中,您使用 &&在一行上使用两个命令 - 那么
如果您真的想仅使用 xargs 在一行中完成所有操作,为什么不这样做呢?尽管我相信这
会更有意义。
In your own example you use && to use two commands on one line - so why not do
if you really want to do it all in one line using xargs only. Though I believe that
would make more sense.
如果您有一个多核 CPU(现在我们大多数人都有),那么 GNU Parallel http://www. gnu.org/software/parallel/ 可能会缩短运行时间:
-j+0 将并行运行与 CPU 核心数量一样多的作业。
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:
-j+0 will run as many jobs in parallel as you have CPU cores.