linux shell 脚本攻略学习6-xargs详解
2013-12-23 02:17
691 查看
xargs是一条Unix和类Unix操作系统的常用命令。它的作用是将参数列表转换成小块分段传递给其他命令,以避免参数列表过长的问题。
例如,下面的命令:
xargs命令应该紧跟在管道操作符之后,它以标准输入作为主要的源数据流,并使用stdin并通过提供命令行参数来执行其他命令,例如:
实例应用2,将单行输入转换为多行输出:
空格是默认的定界符,-n表示每行显示几个参数
还可以使用-d参数来分隔参数,如下:
实例应用3,读取stdin,将格式化参数传递给命令
需求3,如何将参数嵌入到固定的命令行中?如下所示:
使用xargs的解决方案:
实例应用4,结合find使用xargs
前面已经举过例子,这里要注意的是文件名称定界符要以字符null来分隔输出,如下所示,否则可能会误删文件
其他:
例如,下面的命令:
rm`find/path-typef`
如果path目录下文件过多就会因为“参数列表过长”而报错无法执行。但改用xargs以后,问题即获解决。
find/path-typef-print0|xargs-0rm
本例中xargs将find产生的长串文件列表拆散成多个子串,然后对每个子串调用rm。-print0表示输出以null分隔(-print使用换行);-0表示输入以null分隔。这样要比如下使用find命令效率高的多。
find/path-typef-execrm'{}'\;
xargs命令应该紧跟在管道操作符之后,它以标准输入作为主要的源数据流,并使用stdin并通过提供命令行参数来执行其他命令,例如:
command|xargs
实例应用1,将多行输入转换为单行输出:
amosli@amosli-pc:~/learn$catexample.txt 12345 67 8
amosli@amosli-pc:~/learn$catexample.txt|xargs 12345678
实例应用2,将单行输入转换为多行输出:
amosli@amosli-pc:~/learn$catexample.txt|xargs-n2 12 34 56 78
空格是默认的定界符,-n表示每行显示几个参数
还可以使用-d参数来分隔参数,如下:
amosli@amosli-pc:~/learn$echo"splitXhiXamosliXsplit"|xargs-d"X"-n1 split hi amosli split
实例应用3,读取stdin,将格式化参数传递给命令
#定义一个echo命令每次在输出参数后都加上# amosli@amosli-pc:~/learn$catcecho.sh echo$*'#' #需求1:输出多个参数 amosli@amosli-pc:~/learn$shcecho.sharg1 arg1# amosli@amosli-pc:~/learn$shcecho.sharg2 arg2# amosli@amosli-pc:~/learn$shcecho.sharg3 arg3# #需求2:一次性提供所有的命令参数 amosli@amosli-pc:~/learn$shcecho.sharg1arg2arg3 arg1arg1arg2arg3# #针对需求1、2,使用xargs代替,先用vi建一个新文件args.txt,如下: amosli@amosli-pc:~/learn$catargs.txt arg1 arg2 arg3 #批量输出参数: amosli@amosli-pc:~/learn$catargs.txt|xargs-n1 arg1 arg2 arg3 amosli@amosli-pc:~/learn$catargs.txt|xargs-n2shcecho.sh arg1arg2# arg3# #一次性输出所有参数: amosli@amosli-pc:~/learn$catargs.txt|xargsshcecho.sh; arg1arg2arg3#
需求3,如何将参数嵌入到固定的命令行中?如下所示:
amosli@amosli-pc:~/learn$shcecho.sh-pargs1-1 -pargs1-1# amosli@amosli-pc:~/learn$shcecho.sh-pargs2-1 -pargs2-1# amosli@amosli-pc:~/learn$shcecho.sh-pargs3-1 -pargs3-1#
使用xargs的解决方案:
amosli@amosli-pc:~/learn$catargs.txt|xargs-I{}shcecho.sh-p{}-1 -parg1-1# -parg2-1# -parg3-1# #-I{}批定了替换字符串,字符串{}会被从stdin读取到的参数所替换,使用-I时,能循环按要求替换相应的参数
实例应用4,结合find使用xargs
前面已经举过例子,这里要注意的是文件名称定界符要以字符null来分隔输出,如下所示,否则可能会误删文件
amosli@amosli-pc:~/learn$find.-typef-name"*test*.txt"-print0|xargs-0rm-f
其他:
catfile|(whilereadarg;docat$arg;done) catfile|xargs-I{}cat{}
相关文章推荐
- linux shell脚本学习xargs命令使用详解
- linux shell 脚本攻略学习11--mkdir和touch命令详解
- linux shell 脚本攻略学习14--head命令详解,tail命令详解
- linux shell 脚本攻略学习20--awk命令入门详解
- linux shell 脚本攻略学习7---tr命令详解
- linux shell 脚本攻略学习12--文件权限详解,chmod命令详解,chown命令详解,chattr命令详解
- linux shell 脚本攻略学习7---tr命令详解
- linux shell 脚本攻略学习9--rename命令详解
- linux shell 脚本攻略学习10--生成任意大小的文件和文本文件的交集与差集详解
- linux shell 脚本攻略学习19--sed命令详解
- linux shell 脚本攻略学习13--file命令详解,diff命令详解
- linux shell脚本学习xargs命令使用详解
- linux shell脚本学习xargs命令使用详解
- linux shell 脚本攻略学习13--file命令详解,diff命令详解
- linux shell 脚本攻略学习18--grep命令详解
- linux shell 脚本攻略学习8---md5校验,sort排序,uniq命令详解
- linux shell 脚本攻略学习16--wc命令详解,tree命令详解
- linux shell脚本学习xargs命令使用详解
- linux shell 脚本攻略学习5---find命令详解
- linux shell脚本学习xargs命令使用详解