使用xargs获取输出内容并拼接成命令执行
[root@testos ~]# ls *.sql
abc1.sql abc2.sql abc3.sql abc4.sql abc5.sql
[root@testos ~]# ll *.sql | awk '/.*sql/ {print $9}'
abc1.sql
abc2.sql
abc3.sql
abc4.sql
abc5.sql
[root@testos ~]# cat *.sql
SET CLIENT_ENCODING TO UTF8;
SET STANDARD_CONFORMING_STRINGS TO ON;
BEGIN;
insert into test values(1);
COMMIT;
SET CLIENT_ENCODING TO UTF8;
SET STANDARD_CONFORMING_STRINGS TO ON;
BEGIN;
insert into test values(2);
COMMIT;
SET CLIENT_ENCODING TO UTF8;
SET STANDARD_CONFORMING_STRINGS TO ON;
BEGIN;
insert into test values(3);
COMMIT;
SET CLIENT_ENCODING TO UTF8;
SET STANDARD_CONFORMING_STRINGS TO ON;
BEGIN;
insert into test values(4);
COMMIT;
SET CLIENT_ENCODING TO UTF8;
SET STANDARD_CONFORMING_STRINGS TO ON;
BEGIN;
insert into test values(5);
COMMIT;
[root@testos ~]# ls *.sql | xargs -i psql -d testdb -U postgres -f {}
SET
SET
BEGIN
INSERT 0 1
COMMIT
SET
SET
BEGIN
INSERT 0 1
COMMIT
SET
SET
BEGIN
INSERT 0 1
COMMIT
SET
SET
BEGIN
INSERT 0 1
COMMIT
SET
SET
BEGIN
INSERT 0 1
COMMIT
[root@testos ~]#
上面
ls *.sql | xargs -i psql -d testdb -U postgres -f {}
或
ll *.sql | awk '/.*sql/ {print $9}' | xargs -i psql -d testdb -U postgres -f {}
的效果相当于
psql -d testdb -U postgres -f abc1.sql
psql -d testdb -U postgres -f abc2.sql
psql -d testdb -U postgres -f abc3.sql
psql -d testdb -U postgres -f abc4.sql
psql -d testdb -U postgres -f abc5.sql
这5条命令。
如果用 ls *.sql | xargs psql -d testdb -U postgres -f ,那效果就相当于
psql -d testdb -U postgres -f abc1.sql abc2.sql abc3.sql abc4.sql abc5.sql
这条命令了。
所以,如果需要xargs 每次 只把 输出结果集中的 一个结果 传给xargs后的命令,就使用 cmd1 | xargs -i cmd2 {} 的方式;
如果需要xargs 一次性 就把 输出结果集中的 所有结果 传给xargs后的命令,就使用 cmd1 | xargs cmd2 的方式。
如果怕出错,可以使用xargs的 -p 参数,这样系统会在执行命令前会询问用户是否执行命令。
阅读(4558) | 评论(0) | 转发(0) |