将两次传递给 xargs 的数据放在一行中

发布于 2024-08-04 14:39:23 字数 528 浏览 6 评论 0原文

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 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

放我走吧 2024-08-11 14:39:23

在您自己的示例中,您使用 &&在一行上使用两个命令 - 那么

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

会更有意义。

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.

浪推晚风 2024-08-11 14:39:23

如果您有一个多核 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 核心数量一样多的作业。

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.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文