当前位置:  操作系统/服务器>linux

linux shell脚本学习xargs命令使用详解

    来源: 互联网  发布时间:2014-10-15

    本文导语:  例如,下面的命令: 代码如下:rm `find /path -type f` 如果path目录下文件过多就会因为“参数列表过长”而报错无法执行。但改用xargs以后,问题即获解决。 代码如下:find /path -type f -print0 | xargs -0 rm 本例中xargs将find产生的长串文件...

例如,下面的命令:

代码如下:

rm `find /path -type f`

如果path目录下文件过多就会因为“参数列表过长”而报错无法执行。但改用xargs以后,问题即获解决。

代码如下:

find /path -type f -print0 | xargs -0 rm

本例中xargs将find产生的长串文件列表拆散成多个子串,然后对每个子串调用rm。-print0表示输出以null分隔(-print使用换行);-0表示输入以null分隔。这样要比如下使用find命令效率高的多。

代码如下:

find /path -type f -exec rm '{}' ;

xargs命令应该紧跟在管道操作符之后,它以标准输入作为主要的源数据流,并使用stdin并通过提供命令行参数来执行其他命令,例如:

代码如下:

command | xargs

实例应用1,将多行输入转换为单行输出:

代码如下:

amosli@amosli-pc:~/learn$ cat example.txt
1 2 3 4 5
6 7
8
amosli@amosli-pc:~/learn$ cat example.txt | xargs
1 2 3 4 5 6 7 8

实例应用2,将单行输入转换为多行输出:

代码如下:

amosli@amosli-pc:~/learn$ cat example.txt | xargs -n 2
1 2
3 4
5 6
7 8

空格是默认的定界符,-n 表示每行显示几个参数

还可以使用-d参数来分隔参数,如下:

代码如下:

amosli@amosli-pc:~/learn$ echo "splitXhiXamosliXsplit" | xargs -d "X" -n 1
split
hi
amosli
split

实例应用3,读取stdin,将格式化参数传递给命令

代码如下:

#定义一个echo命令每次在输出参数后都加上#
amosli@amosli-pc:~/learn$ cat cecho.sh
echo $*'#'

#需求1:输出多个参数
amosli@amosli-pc:~/learn$ sh cecho.sh arg1
arg1#
amosli@amosli-pc:~/learn$ sh cecho.sh arg2
arg2#
amosli@amosli-pc:~/learn$ sh cecho.sh arg3
arg3#

#需求2:一次性提供所有的命令参数
amosli@amosli-pc:~/learn$ sh cecho.sh arg1 arg2 arg3
arg1 arg1 arg2 arg3#

#针对需求1、2,使用xargs代替,先用vi建一个新文件args.txt,如下:
amosli@amosli-pc:~/learn$ cat args.txt
arg1
arg2
arg3
#批量输出参数:
amosli@amosli-pc:~/learn$ cat args.txt | xargs -n 1
arg1
arg2
arg3
amosli@amosli-pc:~/learn$ cat args.txt | xargs -n 2 sh cecho.sh
arg1 arg2#
arg3#
#一次性输出所有参数:
amosli@amosli-pc:~/learn$ cat args.txt | xargs sh cecho.sh ;
arg1 arg2 arg3#

需求3,如何将参数嵌入到固定的命令行中?如下所示:

代码如下:

amosli@amosli-pc:~/learn$ sh cecho.sh -p args1 -1
-p args1 -1#
amosli@amosli-pc:~/learn$ sh cecho.sh -p args2 -1
-p args2 -1#
amosli@amosli-pc:~/learn$ sh cecho.sh -p args3 -1
-p args3 -1#

使用xargs的解决方案:

代码如下:

amosli@amosli-pc:~/learn$ cat args.txt | xargs -I {} sh cecho.sh -p {} -1
-p arg1 -1#
-p arg2 -1#
-p arg3 -1#

#-I {}批定了替换字符串,字符串{}会被从stdin读取到的参数所替换,使用-I时,能循环按要求替换相应的参数

实例应用4,结合find使用xargs

前面已经举过例子,这里要注意的是文件名称定界符要以字符null来分隔输出,如下所示,否则可能会误删文件

代码如下:

amosli@amosli-pc:~/learn$ find . -type f -name "*test*.txt" -print0 | xargs -0 rm -f

其他:

代码如下:

cat file | ( while read arg; do cat $arg; done )
cat file | xargs -I {} cat {}

    
 
 

您可能感兴趣的文章:

  • Linux/centos/redhat下各种压缩解压缩方式详解
  • linux 2.4 内核软中断详解?
  • linux c malloc函数定义及用法详解
  • 大家推荐几本详解Linux或unix 操作系统源代码的书籍!!!!
  • linux下进程占用内存空间详解
  • 哪有LINUX命令详解下??
  • Linux下NFS服务配置详解
  • 如何在Linux下使用脚本实现程序的自动重启!望各位详解!
  • linux下top命令详解包括top命令参数使用及结果(virt,res,shr)排序举例说明
  • 求linux kernel 2.6.30详解
  • SSL握手通信详解及linux下c/c++ SSL Socket代码举例
  • 读了tcpip详解后有问题,上边的源码是linux哪个版本的?
  • linux top命令详解以及top命令的各项使用技巧详细说明
  • 哪有linux源码的详解?
  • linux经常用到的命令详解
  • 第一次安装linux,提示找不到硬盘驱动,求详解!
  • linux加入windows域 是什么意思?求详解,加入后的效果是怎么样的
  • 求《LINUX设备驱动开发详解》电子版
  • 解析Linux系统中JVM内存2GB上限的详解
  • 求linux下 ./configure;make;make install一系列命令的详解
  • linux c 查找使用库的cflags与libs的方法详解
  • 请问在 LINUX下如何编辑脚本(可以直接运行脚本访问WINDOW系统)
  • 如何传递参数给linux shell 脚本(当脚本从标准输入而不是从文件获取时)
  • 关于arm linux下的别名配置脚本如何在进入用户时让shell执行的问题,如bashrc,profile,.bash_profile等脚本,寻求高手解答
  • Linux下如何编写脚本文件
  • 关于linux的脚本运行。。。求高人指点
  • linux重新启动后自动运行脚本程序
  • 谁能简单介绍一下LINUX上的各种语言脚本的功能.
  • linux shell脚本
  • 请问关于linux脚本的一个问题。
  • LINUX的系统管理脚本
  •  
    本站(WWW.)旨在分享和传播互联网科技相关的资讯和技术,将尽最大努力为读者提供更好的信息聚合和浏览方式。
    本站(WWW.)站内文章除注明原创外,均为转载、整理或搜集自网络。欢迎任何形式的转载,转载请注明出处。












  • 相关文章推荐
  • Linux常用命令介绍:更改所属用户群组或档案属性
  • linux中有没有什么命令能列出所有linux的内部命令
  • linux命令大全详细分类介绍及常用linux命令文档手册下载
  • linux在脚本执行命令和直接在命令行执行命令有什么区别
  • linux下nm命令(显示可执行文件的符号信息)介绍以及常见nm命令用法举例
  • 有没有在windows下模拟Linux命令系统的软件! 我想学习Linux的基本命令!
  • Linux下chmod命令详细介绍及用法举例
  • linux 的命令操作和 windows的命令提示行有什么不同呢?? 为什么windows一般都不用命令提示行操作呢??
  • linux bash shell命令:grep文本搜索工具简介
  • linux系统安装测试命令oslevel,lsdev命令不识别
  • Linux_centos_redhat下tar命令解压tgz文件方法
  • 在Linux下使用ftp命令,被提示命令没有找到
  • linux下利用(cat,strings,head,sed)命令生成随机字符串
  • linux命令行下使用curl命令查看自己机器的外网ip
  • linux下free命令显示的内存使用情况分析
  • linux中的用户,用什么命令修改密码(要一条命令做到)???
  • mount命令(linux操作系统)挂载卸载文件系统(cifs,光驱,nfs等)方法介绍
  • linux 中查看过去运行的命令的命令是什么?
  • Linux下curl的下载,安装以及curl命令的详细参数,用法介绍
  • linux下执行命令为什么要在命令前加./
  • linux下不使用sudo命令执行docker的操作步骤
  • linux的命令,怎么能知道这个命令的默认选项是什么?
  • linux c/c++ IP字符串转换成可比较大小的数字
  • 在win分区上安装linux和独立分区安装linux有什么区别?可以同时安装吗?(两个linux系统)
  • linux哪个版本好?linux操作系统版本详细介绍及选择方案推荐
  • 在虚拟机上安装的linux上,能像真的linux系统一样开发linux程序么?
  • secureCRT下Linux终端汉字乱码解决方法
  • 我重装window后,把linux的引导区覆盖了,进不了linux怎么办?急啊,望热心的人帮助 (现在有linux的盘)
  • Linux c字符串中不可打印字符转换成16进制
  • 安装vmware软件,不用再安装linux系统,就可以模拟linux系统了,然后可以在其上学习一下LINUX下的基本操作 了?
  • Linux Kernel 'sctp_v6_xmit()'函数信息泄露漏洞


  • 站内导航:


    特别声明:169IT网站部分信息来自互联网,如果侵犯您的权利,请及时告知,本站将立即删除!

    ©2012-2021,,E-mail:www_#163.com(请将#改为@)

    浙ICP备11055608号-3