linux下xargs命令用法详解

From:http://biancheng.dnbcw.info/shell/268829.html


xargs在 linux中是个很有用的命令,它经常和其他命令组合起来使用,非常的灵活.
xargs是给命令传递参数的一个过滤器,也是组合多个命令的一个工具.它把一个数据流分割为一些足够小的块,以方便过滤器和命令进行处理.由此这个命令也是后置引用的一个强有力的替换.在一般使用过多参数的命令替换失败的时候,用xargs来替换它一般都能成功.通常情况下,xargs从管道或者stdin中读取数据,但是它也能够从文件的输出中读取数据.
xargs的默认命令是echo.这意味着通过管道传递给xargs的输入将会包含换行和空白,不过通过xargs的处理,换行和空白将被空格取代.如:
bash$ ls -l
total 0
-rwxr-xr-x 2 root root 4096 2009-02-23 090218.txt
-rwxr-xr-x 2 root root 12288 2009-06-08 090607.txt
bash$ ls -l | xargs
090218.txt 090607.txt
bash$ find ~/mail -type f | xargs grep "Linux"
./misc:User-Agent: slrn/0.9.8.1 (Linux)
./sent-mail-jul-2005: hosted by the Linux Documentation Project.
./sent-mail-jul-2005: (Linux Documentation Project Site, rtf version)
./sent-mail-jul-2005: Subject: Criticism of Bozo's Windows/Linux article
. . .
ls | xargs -p -l gzip 使用gzips压缩当前目录下的每个文件,一次压缩一个, 并且在每次压缩前都提示用户.
注意: 一个有趣的xargs选项是-n NN,NN是限制每次传递进来参数的个数.
ls | xargs -n 8 echo以每行8列的形式列出当前目录下的所有文件.
注意: 另一个有用的选项是-0,使用 find -print0 或 grep -lZ 这两种组合方式. 这允许处理包含空白或引号的参数.
find / -type f -print0 | xargs -0 grep -liwZ GUI | xargs -0 rm -f
grep -rliwZ GUI / | xargs -0 rm -f
上边两行都可以用来删除任何包含"GUI"的文件。
-i 表示 find 传递给xargs的结果 由{}来代替
-I 我认为是和i差不多,可以这么认为 -i可以用-I {} 来代替
-p 交互式提问y来确认命令的每次执行。
-t 在执行前回显各个command
还有参数-s 和 -x 具体查手册.

下面是另一个示例,我们希望计算这些文件中的行数:

$ file * | grep ASCII | cut -d":"-f1 | xargs wc -l

47853 alert_DBA102.log

19 dba102_cjq0_14493.trc

29053dba102_mmnl_14497.trc

154 dba102_reco_14491.trc

43 dba102_rvwr_14518.trc

77122total

(注:上述任务还可用以下命令完成:) 

$ wc -l ‘file * | grep ASCII | cut-d":" -f1 | grep ASCII | cut -d":" -f1‘

该 xargs 版本用于阐释概念。Linux 可以用几种方法来完成同一个任务;请使用最适合您的情况的方法。

使用该方法,您可以快速重命名目录中的文件。

$ ls | xargs -t -i mv {} {}.bak

-i 选项告诉 xargs 用每项的名称替换 {}。-t 选项指示 xargs 先打印命令,然后再执行。

另一个非常有用的操作是当您使用 vi 打开要编辑的文件时:

$ file * | grep ASCII | cut -d":"-f1 | xargs vi

该命令使用 vi 逐个打开文件。当您希望搜索多个文件并打开它们进行编辑时,使用该命令非常方便。

它还有几个选项。最有用的可能是 -p 选项,它使操作具有可交互性:

$ file * | grep ASCII | cut -d":"-f1 | xargs -p vi

vi alert_DBA102.log dba102_cjq0_14493.trcdba102_mmnl_14497.trc

dba102_reco_14491.trc dba102_rvwr_14518.trc?...

此处的 xarg 要求您在运行每个命令之前进行确认。如果您按下 "y",则执行命令。当您对文件进行某些可能有破坏且不可恢复的操作(如删除或覆盖)时,您会发现该选项非常有用。

-t 选项使用一个详细模式;它显示要运行的命令,是调试过程中一个非常有帮助的选项。 

如果传递给 xargs 的输出为空怎么办?考虑以下命令:

$ file * | grep SSSSSS | cut-d":" -f1 | xargs -t wc -l wc -l 0 $

在此处,搜索 "SSSSSS"后没有匹配的内容;因此 xargs 的输入均为空,如第二行所示(由于我们使用 -t 这个详细选项而产生的结果)。虽然这可能会有所帮助,但在某些情况下,如果没有要处理的内容,您可能希望停止 xargs;如果是这样,可以使用 -r 选项:

$ file * | grep SSSSSS | cut -d":" -f1 | xargs -t -r wc -l$

如果没有要运行的内容,该命令退出。

假设您希望使用 rm 命令(该命令将作为 xargs 命令的参数)删除文件。然而,rm 只能接受有限数量的参数。如果您的参数列表超出该限制怎么办?xargs 的 -n 选项限制单个命令行的参数个数。 

下面显示了如何限制每个命令行仅使用两个参数:即使向 xargs ls -ltr 传递五个文件,但每次向 ls -ltr 仅传递两个文件。

$ file * | grep ASCII | cut -d":"-f1 | xargs -t -n2 ls -ltr

ls -ltr alert_DBA102.log dba102_cjq0_14493.trc

-rw-r----- 1 oracle dba 738 Aug 10 19:18 dba102_cjq0_14493.trc

-rw-r--r-- 1oracle dba 2410225 Aug 13 05:31 alert_DBA102.log

ls -ltr dba102_mmnl_14497.trcdba102_reco_14491.trc

-rw-r----- 1 oracle dba 5386163 Aug 10 17:55 dba102_mmnl_14497.trc

-rw-r----- 1 oracle dba 6808 Aug 13 05:21 dba102_reco_14491.trc

ls -ltrdba102_rvwr_14518.trc

-rw-r----- 1 oracle dba 2087 Aug 10 04:30dba102_rvwr_14518.trc

使用该方法,您可以快速重命名目录中的文件。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/405785.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

监理公司的核心竞争力

企业竞争力模型,无疑要看迈克尔波特的文章,从企业竞争、行业竞争至国家竞争,都有成熟的竞争理论。同多数IT公司一样,监理公司核心竞争力仍然是创新与复制能力.只不过IT产品是监理咨询与服务,纯粹服务产品的研发和管理,…

Altera 速度等级

~~ 转载于:https://www.cnblogs.com/agllero/p/4533848.html

STM32项目中一种在线升级/应用升级OTA-IAP设计方案

STM32 OTA-IAP设计方案 OTA是Over-the-Air的简写,即空中下载技术,通过网络远程给用户进行系统更新和升级。IAP是In Application Programming的简写,IAP是用户自己的程序在运行过程中对User Flash的部分区域进行烧写,目的是为了在…

oracle 主键列创建自增长,powerdesigner创建oracle 数据库表,设置表主键列为自动增长。 ....

1 在表视图的列上创建。 双击表视图,打开table properties ———>columens , 双击要设置的列(显示列的序号的那个按钮,单击后,会显示横向的黑色箭头)。 打开column properties 对话框。在 ‘general’ 项中, 最下面…

嵌入式GUI FTK支持输入法

From: http://blog.csdn.net/absurd/article/details/5318285 春节期间给FTK增加输入法支持,目前支持拼音输入法,五笔输入法和手写输入法。手写输入法只是实现了框架,识别引擎才开个头,这是今年FTK开发的重点任务。拼音输入法&…

STM32程序占用的内存容量计算

STM32中程序占用内存容量 Keil MDK下Code, RO-data,RW-data,ZI-data这几个段: Code存储程序代码。RO-data存储const常量和指令。RW-data存储初始化值不为0的全局变量。ZI-data存储未初始化的全局变量或初始化值为0的全局变量。占用的FlashCode RO Data RW Data; 运行消耗的…

域名解析

搭建网站:要将域名指向主机服务商提供的IP地址,请选择「A记录」;要将域名指向主机服务商提供的另一个域名,请选择「CNAME记录」。建立邮箱:需要设置「MX记录」,根据邮箱服务商提供的MX记录填写。A记录&…

【原创】最值得推荐wince应用和wince驱动入门书籍

作者:wogoyixikexiegliet应用方向? C,c#----------本人不做应用只知道用这两个语言用到,不敢推荐 -------也来补充一下。《PROGRAMMING MICROSOFT WINDOWS CE.NET》第三版英文原著Inside Windows CE - John Murray Programm…

oracle中错位函数,Oracle中的一些函数

select initcap(ename) from emp; 该语句能够使 ename 列的首字母大写。select concat(hello ,world) from dual; 该语句是hello 和 world 被连接起来 concat()select ename, substr(ename,-2,2) from emp; 该语句呢,这个substr(ename , -2 ,2 ) 我一直有个疑问 , 那就是 …

Bash数组操作教程

From: http://zengrong.net/post/1518.htm 一、定义数组 1. 使用[]操作符 ?View Code BASH1 2names[0]zrong names[1]jacky 2. 使用()直接赋值 ?View Code BASH1 2 3names(zrong jacky) # 或 names([0]zrong [1]jacky) 3. 使用declare -a定义数组。这种方法可以将一个空的…

matlab生成exe-在没有安装matlab的电脑上运行matlab生成的exe

在没有安装matlab的电脑上运行matlab生成的exe 本文介绍如何将matlab生成exe,并将该exe在没有安装matlab的电脑上运行,与以前的博文相似地,不说废话,直接干货。 1、编写函数 2、用mcc 生成exe mcc -m testexe.m 3、在matlab命令…

摄象机的格式发展史

大家可能都知道什么是摄象机,也可能经常听说各种各样的摄象机,什么,V8,D8,DV... ...在这么多陌生的名词中,你是否感觉到一 些迷茫,到底它们都代表着什么,到底里面有这怎样的一些门道…

Androd开发之广告栏设计

对于做Android开发的工程师对于这个效果的实现一定不陌生,本篇我将带领大家先简单实现这个效果,再为大家介绍一下其中的原理,方便新手学习,老手复习,内容简单易懂,没有基础一样学习,不扯没用的了…

oracle数据库归档闪回,[Oracle]Oracle的闪回归档

Oracle的闪回归档场景需求,由于管理数据库的一些核心表,在实施初期会有人为误删除的问题。Oracle 11gR2提供了闪回归档的特性,可以保证不用RMAN来恢复误删除的数据。实践如下:1.创建一个公共的闪回表空间。用于各个业务模块都可以使用的闪回区…

在exe执行机上安装MCR环境(matlab运行环境)

未安装matlab的执行机上运行matlab生成的exe,需要提前安装好MCR。此文介绍安装方法。 1、 D:\MATLAB\R2016a\toolbox\compiler\deploy\win64 中MCRinstaller.exe 安装到该计算机上 2、 Mbuild –setup 安装合适的编译器 3、 将M 文件编译为可执行文件的语法是 mc…

终端乱码的终极解决方案

From:http://handao.blog.techweb.com.cn/archives/193.html 初入linux的程序员们,经常会受到乱码的问候。可谓“始乱终弃”。因为乱码,并且最终放弃了linux的不在少数。好吧,言归正传,先看看各类乱码是怎么形成的。 中文字符乱码…

锐捷官方提供122套实验题.

锐捷官方提供122套实验题.http://u.115.com/file/f058c9459e转载于:https://blog.51cto.com/lidai/430896