xargs

大 多数 Linux 命令都会产生输出:文件列表、字符串列表等。但如果要使用其他某个命令并将前一个命令的输出作为参数该怎么办?例如,file 命令显示文件类型(可执行文件、ascii 文本等);你能处理输出,使其仅显示文件名,目前你希望将这些名称传递给 ls -l 命令以查看时间戳记。xargs 命令就是用来完成此项工作的。他允许你对输出执行其他某些命令。记住下面这个来自于第 1 部分中的语法:

例1:

file -Lz * | grep ASCII | cut -d":" -f1 | xargs ls -ltr

让我们来剖析这个命令字符串。第一个,file -Lz *,用于查找是符号链接或经过压缩的文件。他将输出传递给下一个命令 grep ASCII,该命令在其中搜索 "ASCII" 字符串并产生如下所示的输出:

alert_DBA102.log:        ASCII English text

alert_DBA102.log.Z:      ASCII text (compress’d data 16 bits)

dba102_asmb_12307.trc.Z: ASCII English text (compress’d data 16 bits)

dba102_asmb_20653.trc.Z: ASCII English text (compress’d data 16 bits)

由于我们只对文件名感兴趣,因此我们应用下一个命令 cut -d":" -f1,仅显示第一个字段:

alert_DBA102.log

alert_DBA102.log.Z

dba102_asmb_12307.trc.Z

dba102_asmb_20653.trc.Z

目前,我们希望使用 ls -l 命令,将上述列表作为参数进行传递,一次传递一个。xargs 命令允许你这样做。最后一部分,xargs ls -ltr,用于接收输出并对其执行 ls -ltr 命令,如下所示:

ls -ltr alert_DBA102.log

ls -ltr alert_DBA102.log.Z

ls -ltr dba102_asmb_12307.trc.Z

ls -ltr dba102_asmb_20653.trc.Z

因此,xargs 本身虽然没有多大用处,但在和其他命令相结合时,他的功能非常强大。

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

例 2:

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

47853 alert_DBA102.log

19 dba102_cjq0_14493.trc

29053 dba102_mmnl_14497.trc

154 dba102_reco_14491.trc

43 dba102_rvwr_14518.trc

77122 total

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

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

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

使用该方法,你能快速重命名目录中的文件。

例3:

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

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

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

例4:

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

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

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

例5:

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

vi alert_DBA102.log dba102_cjq0_14493.trc dba102_mmnl_14497.trc

dba102_reco_14491.trc dba102_rvwr_14518.trc ?...

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

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

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

例6:

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

wc -l

0

$

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

例7:

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

$

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

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

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

例8:

$ 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--    1 oracle   dba       2410225 Aug 13 05:31 alert_DBA102.log

ls -ltr dba102_mmnl_14497.trc dba102_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 -ltr dba102_rvwr_14518.trc

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

使用该方法,你能快速重命名目录中的文件。

比较实用的应用

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

-i 选项告诉 xargs 用每项的名称替换 {}。

删除数量比较多的文件

ls | xargs -n 20 rm -fr

ls当然是输出所有的文件名(用空格分割)

xargs就是将ls的输出,每20个为一组(以空格为分隔符),作为rm -rf的参数

也就是说将所有文件名20个为一组,由rm -rf删除,这样就不会超过命令行的长度了

linux中xargs用法,Linux中xargs的用法相关推荐

  1. linux命令中xargs,在Linux上使用xargs命令的详细教程

    大家好,我是良许. 在使用 Linux 时,你是否遇到过需要将一些命令串在一起,但是其中一个命令不接受管道输入的情况呢?在这种情况下,我们就可以使用 xargs 命令. xargs 可以将一个命令的输 ...

  2. xargs的用法--linux

    xargs,大 多数 Linux命令都会产生输出:文件列表.字符串列表等.但如果要使用其他某个命令并将前一个命令的输出作为参数该怎么办?例如,file命令显示文件类型(可执行文件.ascii 文本等) ...

  3. linux中ftp的用法,linux中的ftp命令用法(7页)-原创力文档

    第 第 PAGE 1 页 共 NUMPAGES 1 页 linux中的ftp命令用法 Linux系统中的ftp命令功能强大,那么它的具体用法是怎样呢?下面由小编为大家整理了linux中的ftp命令用法 ...

  4. unix和linux命令_Linux / Unix系统中SSH命令的用法

    unix和linux命令 Any security-minded Linux user will always use SSH protocol when connecting to servers. ...

  5. linux系统中mywho命令,linux查看在线用户 who命令参数及用法

    linux who 命令 详解 Linux最常用命令之一 功能说明:显示目前登入系统的用户信息. 语 法:who [-Himqsw][--help][--version][am i][记录文件] 补充 ...

  6. linux cp -r 参数,Linux系统中cp命令的参数及用法详解

    Linux系统中cp命令主要是用来复制文件或者目录.下面由学习啦小编为大家整理了Linux系统中cp命令的参数及用法详解的相关知识,希望对大家有帮助! Linux系统中cp命令的参数及用法详解:参数说 ...

  7. Linux中cron的用法,Linux中cron命令的用法详解

    linux中有一个命令可以定期来执行系统任务.这就是crond服务.下面介绍下crontab命令的用法. linux任务调度的工作主要分为以下两类: 编辑/etc/crontab 文件配置cron c ...

  8. linux服务器中学习使用FFmpeg命令overlay滤镜用法

    linux服务器中学习使用FFmpeg命令overlay滤镜用法 1.overlay技术简介 2.命令行用法 2.1 视频中叠加图标 2.1.1 直接叠加图标 2.1.2 延时叠加图标 2.2 视频中 ...

  9. linux的source命令,Linux中source命令的用法

    Linux中source命令的用法 Linux系统中,source命令通常用"."来代替,是一个点命令,与一般的命令有所不同,下面小编就给大家介绍下Linux中source命令的用 ...

  10. linux命令 mv -v,Linux中mv命令的高级用法示例

    前言 mv命令是move的缩写,可以用来移动文件或者将文件改名(move (rename) files),是Linux系统下常用的命令,经常用来备份文件或者目录. 命令格式: mv [选项] 源文件或 ...

最新文章

  1. 自动驾驶仿真分析,提高研发效率
  2. VirtualBox: Effective UID is not root
  3. 支付宝支付 第四集:配置类的定义和注入
  4. Python程序的函数和代码复用
  5. python调试器的功能,python调试器是什么
  6. 【STM32】串口收发主要程序代码分析
  7. 10年前腾讯微信后台第一天提交的代码曝光!
  8. 解读WPF中的Xaml
  9. python大文件排序_python实现按创建时间对文件排序
  10. Mongodb删除重复数据
  11. 前端调用后端接口 xhr 只看到一次 实际调用两次_持续演进的接口自动化测试方案...
  12. c++中的stl容器——map的介绍与常用用法
  13. 使用cl编译器,将记事本写的c文件编译成dll和exe 步骤如下(记事本保存成.c)
  14. [数据库】sql 查询语句 汇总
  15. 恭喜你!看到了这篇靠谱的12款CAM软件测评(下篇)
  16. 计算机组装所需硬件,电脑组装机配置清单
  17. SqlServer毫秒/秒转时分秒
  18. 英语复数名词的变化规则
  19. Android wps自定义功能,完美兼容安卓4.2新增多项功能 WPS移动版升级至5.2
  20. 【翻译】Bing-CF-IDF+:语义驱动的新闻推荐系统

热门文章

  1. matlab梯度检测,Matlab:关于梯度的一阶导数边缘检测
  2. 关于 STM32G0/G4/L4 HAL_IIC HAL_I2C_Mem_Read 函数读取M24C64存储芯片遇到的问题
  3. Android libcore添加JNI调用Hal层接口问题
  4. DFN封装系列ESD静电保护器件
  5. 带防夹功能的升降器原理_全系标配行车自动落锁功能,全新凯美瑞表现分析
  6. 6000字,详解数据仓库明星产品背后的技术奥秘
  7. 从NoSQL到Lakehouse,Apache Doris的13年技术演进之路
  8. 【loj#2524】【bzoj5303】 [Haoi2018]反色游戏(圆方树)
  9. LOJ 数列分块入门6
  10. linux nginx大量TIME_WAIT的解决办法--转