对xargs的简单理解
2012-06-06 10:32 夜幕降临 阅读(369) 评论(0) 编辑 收藏 举报man手册
xargs - build and execute command lines from standard input
xargs可以从标准输入建立一个命令行参数
具体用法
1 ls | grep '\.[ch]$' | xargs rm -f
这个命令把当前目录下的文件用ls列出来,然后ls的结果通过管道传递到grep,grep这时从标准输入(第一个管道读端),grep从文件列表中找到那些以.c或者.h结尾的文件。把这些文件名通过标准输出(第二个管道写端)传递到xargs,xargs通过从管道读端接收到的文件拼接成一个命令行参数给rm -f命令,然后rm -f删除找到的文件。
下面这段代码的作用是打印出每个命令行参数的地址和值
1 #include <stdio.h> 2 3 4 int main(int argc, char *argv[]) 5 { 6 int i = 0; 7 for(;i < argc; i++){ 8 printf("%p argv[%d] = %s \n", argv+i, i, argv[i]); 9 } 10 11 return 0; 12 }
通过把这个命令放在xargs后面可以看出xargs的效果,结果如下
tom@NextZone ~/Code/unix/final/B-Shell $ ls | grep '\.[ch]$' | xargs ./argv 0x7fff6c873988 argv[0] = ./argv 0x7fff6c873990 argv[1] = argv.c 0x7fff6c873998 argv[2] = error.c 0x7fff6c8739a0 argv[3] = myvar.c 0x7fff6c8739a8 argv[4] = redir.c 0x7fff6c8739b0 argv[5] = while.c
可以看出xargs把找到的文件拼接成一个个参数传递给我们的程序。
可以说xargs加强的管道的力量,把那些不能不能处理标准输入的程序也融合到管道里面。