(xargs) - 给其他命令传递参数的一个过滤器

xargs

给其他命令传递参数的一个过滤器

补充说明

xargs 命令 是给其他命令传递参数的一个过滤器,也是组合多个命令的一个工具。它擅长将标准输入数据转换成命令行参数,xargs 能够处理管道或者 stdin 并将其转换成特定命令的命令参数。xargs 也可以将单行或多行文本输入转换为其他格式,例如多行变单行,单行变多行。xargs 的默认命令是 echo,空格是默认定界符。这意味着通过管道传递给 xargs 的输入将会包含换行和空白,不过通过 xargs 的处理,换行和空白将被空格取代。xargs 是构建单行命令的重要组件之一。

xargs 命令用法

xargs 用作替换工具,读取输入数据重新格式化后输出。

定义一个测试文件,内有多行文本数据:

cat test.txt

a b c d e f g
h i j k l m n
o p q
r s t
u v w x y z

多行输入单行输出:

cat test.txt | xargs

a b c d e f g h i j k l m n o p q r s t u v w x y z

使用 -n 进行多行输出

-n 选项 多行输出:

cat test.txt | xargs -n3

a b c
d e f
g h i
j k l
m n o
p q r
s t u
v w x
y z

使用 -d 分割输入

-d 选项 可以自定义一个定界符:

echo "nameXnameXnameXname" | xargs -dX

name name name name

结合 -n 选项 使用:

echo "nameXnameXnameXname" | xargs -dX -n2

name name
name name

读取 stdin

读取 stdin,将格式化后的参数传递给命令

假设一个命令为 sk.sh 和一个保存参数的文件 arg.txt:

#!/bin/bash
#sk.sh 命令内容,打印出所有参数。

echo $*

arg.txt 文件内容:

cat arg.txt

aaa
bbb
ccc

结合 -I 选项

xargs 的一个 选项 -I ,使用 -I 指定一个替换字符串{},这个字符串在 xargs 扩展时会被替换掉,当 -I 与 xargs 结合使用,每一个参数命令都会被执行一次:

cat arg.txt | xargs -I {} ./sk.sh -p {} -l

-p aaa -l
-p bbb -l
-p ccc -l

复制所有图片文件到 /data/images 目录下:

ls *.jpg | xargs -n1 -I cp {} /data/images

结合 find 命令使用

xargs 结合 find 使用

用 rm 删除太多的文件时候,可能得到一个错误信息:/bin/rm Argument list too long. 用 xargs 去避免这个问题:

find . -type f -name "*.log" -print0 | xargs -0 rm -f

xargs -0 将 \0 作为定界符。

统计一个源代码目录中所有 php 文件的行数:

find . -type f -name "*.php" -print0 | xargs -0 wc -l

查找所有的 jpg 文件,并且压缩它们:

find . -type f -name "*.jpg" -print | xargs tar -czvf images.tar.gz

打印出执行的命令

结合 -t 选项可以打印出 xargs 执行的命令

ls | xargs -t -I{} echo {}

会输出当前目录下的文件列表和执行的 echo 命令

使用 -p 选项确认执行的命令

-p 选项会在执行每一个命令时弹出确认,当你需要非常准确的确认每一次操作时可以使用 -p 参数,比如,查找当前目录下 .log 文件,每一次删除都需要确认:

find . -maxdepth 1 -name "*.log" | xargs -p -I{} rm {}

执行多个命令

使用 -I 选项可以让 xargs 执行多个命令

cat foo.txt
one
two
three

cat foo.txt | xargs -I % sh -c 'echo %; mkdir %'
one
two
three

ls
one two three

其他应用

xargs 其他应用

假如你有一个文件包含了很多你希望下载的 URL,你能够使用 xargs 下载所有链接:

cat url-list.txt | xargs wget -c

子 Shell(Subshells)

运行一个 shell 脚本时会启动另一个命令解释器.,就好像你的命令是在命令行提示下被解释的一样,类似于批处理文件里的一系列命令。每个 shell 脚本有效地运行在父 shell(parent shell) 的一个子进程里。这个父 shell 是指在一个控制终端或在一个 xterm 窗口中给你命令指示符的进程。

cmd1 | ( cmd2; cmd3; cmd4 ) | cmd5

如果 cmd2 是 cd /,那么就会改变子 Shell 的工作目录,这种改变只是局限于子 shell 内部,cmd5 则完全不知道工作目录发生的变化。子 shell 是嵌在圆括号 () 内部的命令序列,子 Shell 内部定义的变量为局部变量。

子 shell 可用于为一组命令设定临时的环境变量:

COMMAND1
COMMAND2
COMMAND3
(
  IFS=:
  PATH=/bin
  unset TERMINFO
  set -C
  shift 5
  COMMAND4
  COMMAND5
  exit 3 # 只是从子 shell 退出。
)
# 父 shell 不受影响,变量值没有更改。
COMMAND6
COMMAND7

reference

热点新闻

一加、OPPO联手 有哪些想象空间?

近期有关 OPPO 的相关传闻又多了起来,先是谣传沈义人即将回归 OPPO,后面又是传出 OPPO 与一加的研发团队将合并。不过从目前曝光的消息来看,可信度很高,双方的口碑均有可能因为合并而继续升高。 阅读全文

发布于:2021-01-25T00:15:00Z  |  205次阅读  |  详细内容 »

美一家医院1900剂新冠疫苗被毁 只因清洁工一个举动

近日,美国波士顿一家医院储存的近2000剂莫德纳(Moderna)新冠疫苗被毁,起因居然是储存疫苗的冰箱电源被清洁工意外切断......报道称,此事发生在1月19日。当时,波士顿这家医院的工作人员发现,储存疫苗的一个冰箱没有工作,储存在冰箱中的1900剂莫德纳新冠疫苗被毁。 阅读全文

发布于:2021-01-22T21:48:21Z  |  191次阅读  |  详细内容 »

三星Galaxy S21系列在韩国预售量要比S20高出15%-20%

虽然 Galaxy S20 系列拥有诸多新功能、新体验,但由于多方面的原因该系列的销量并不好。不过本月发售的 Galaxy S21 系列有望带来改变,最新报道称 S21 在韩国本土市场的预订量明显高于 S20 系列。 阅读全文

发布于:2021-01-21T18:45:11Z  |  133次阅读  |  详细内容 »

苹果旗下在线教育推出新世界系列创意课程

苹果在其全球在线教育课程 "Today at Apple "的基础上,又增加了与伦敦出版商It's Nice That联合举办的为期12周的系列创意课程。虽然苹果在因为冠状病毒而取消了一些店内的 "Today at Apple "活动后,又恢复了一些店内活动,但它仍在继续打造线上活动。并且再次与一家位于伦敦的公司合作,这次是设计公司It's Nice That。 阅读全文

发布于:2021-01-27T02:14:31Z  |  127次阅读  |  详细内容 »

默克终止新冠疫苗研发计划 因数据显示免疫应答不足

默克公司将中止两种实验性新冠疫苗的开发,因早期的试验数据表明它们无法产生与自然感染或现有疫苗相当的免疫应答。这家有着疫苗开发成功历史的美国制药巨头采取了与辉瑞、Moderna Inc.、强生等竞争对手不同的策略,使用一种更传统,专注于弱化病毒的疫苗技术。 阅读全文

发布于:2021-01-26T00:14:39Z  |  87次阅读  |  详细内容 »

知情人士:王思聪被强制执行源于为人担保 并非欠债不还

今日,有媒体报道王思聪未按时履行法律义务被法院强制执行,对此,一位接近王思聪的人士告诉记者,“王思聪不是这起强制执行案的主要责任人,从相关资料来看,王思聪只是因为替人担保而卷入这起事件被连带强制执行,并不是王思聪本人投资失败导致被法院强制执行,也不是王思聪个人财务状况出现了问题。” 阅读全文

发布于:2021-01-21T23:14:33Z  |  78次阅读  |  详细内容 »

调查结果显示远程工作者是否真的在工作

在回答 "远程工作者真的在工作吗?"这个问题时,我们很容易听到一些文字背后的质疑声。有用户在Blind上问:"你每天真正投入的工作时间有多少?主要了解到的情况如下: 阅读全文

发布于:2021-01-28T02:44:40Z  |  76次阅读  |  详细内容 »

河南一95后女孩驾车182km/h从天津往家赶 自称担心新冠

女司机在路上算是一个特别的群体,不是因为其车技不行。而是一些女司机常常做出一些,让常人难以理解的驾车技巧,来为女司机群体“正名”。不过,近日,河南一95后女孩,又为女司机“捍卫威名”,驾车最高时速182km/h,一路疾驰从天津往家赶,成为全国“最速女司机”,更意外的是,这名女司机自称跑得快,是因为担心感染新冠肺炎。 阅读全文

发布于:2021-01-21T11:14:42Z  |  71次阅读  |  详细内容 »

最新消息称iPhone 13刘海变小:CMOS迎来大升级

根据DigiTimes消息,苹果iPhone 13将会重新设计面容ID系统,刘海会缩小。报道中的还提到,iPhone 13 Pro以及iPhone 13 Pro Max的图像传感器CMOS将迎来升级。此前,日本网站Mac Otakara也预测,iPhone 13刘海尺寸会更小。传言中都表示,刘海的高度会变小,但宽度变化不大。 阅读全文

发布于:2021-01-22T08:14:58Z  |  65次阅读  |  详细内容 »

2020年通信业统计公报:已开通5G基站超过71.8万个

1月23日消息,工信部发布《2020年通信业统计公报》,数据显示,2020年电信业务收入累计完成1.36万亿元,比上年增长3.6%,增速同比提高2.9个百分点。按照上年价格计算的电信业务总量1.5万亿元,同比增长20.6%。 阅读全文

发布于:2021-01-23T22:44:33Z  |  61次阅读  |  详细内容 »

Zen Studios公布次世代《三维弹球FX》

开发商Zen Studios宣布,《三维弹球FX》的“次世代版本”目前正在开发中,将于2021年推出。这是Zen迄今为止最具野心的弹球游戏项目,《三维弹球FX》将引入“弹球大逃杀”,这是一种融合了大逃杀风格的疯狂多人动作模式。 阅读全文

发布于:2021-01-28T08:44:44Z  |  58次阅读  |  详细内容 »

探访百度上找到的几家代孕机构:“罚个款就没事了”

随着郑爽代孕事件持续发酵,代孕产业再次引起社会广泛关注。第一财经近日调查发现,尽管国家明令禁止,国内地下代孕产业依旧凶猛。在百度上输入“海外生子”等关键词,网页上就会弹出一连串的“试管婴儿”等相关网站信息,在点击进去之后,有的网站甚至直接弹出“代孕”业务。 阅读全文

发布于:2021-01-22T00:44:42Z  |  55次阅读  |  详细内容 »

阿里自研RISC-V处理器玄铁910成功运行Android 10

作为一种开源的处理器指令,RISC-V前途无量,现在主要用于AI、嵌入式等领域,手机领域还鲜有存在感,主要还是安卓系统对RISC-V支持不够。今天阿里巴巴方面宣布了一个重要进展,旗下的平头哥半导体完成了安卓10对RISC-V的移植并开源了全部相关代码。 阅读全文

发布于:2021-01-22T00:44:40Z  |  55次阅读  |  详细内容 »

科学家将再次决定是否调整“世界末日钟”

据外媒CNET报道,“世界末日钟”(Doomsday Clock)是一虚构钟面,由芝加哥大学的《原子科学家公报》杂志于1947年设立。“世界末日钟”象征着由于核威胁、气候变化和信息战,我们的星球离灾难有多近。每年,《原子科学家公报》都会决定是否将时钟推近午夜(代表末日)。 阅读全文

发布于:2021-01-27T11:15:37Z  |  54次阅读  |  详细内容 »

腾讯投资的德国数字银行N26任命新CFO 或明年IPO

据报道,由腾讯投资的德国数字银行N26今日宣布,任命简·坎珀(Jan Kemper)为公司新任首席财务官(CFO)。除了腾讯,知名科技投资者彼得·蒂尔(Peter Thiel)和李嘉诚也是N26的主要支持者。坎珀曾在2014年领导在线零售商Zalando的IPO(首次公开招股),而知情人士称,N26最快将于明年IPO。 阅读全文

发布于:2021-01-26T01:45:21Z  |  53次阅读  |  详细内容 »

有用户发现微信8.0将好友和朋友圈可见人数上限提至1万人

在一份网络上流传的微信8.0完整更新日志中提到,腾讯似乎将好友数量和可访问朋友圈好友数量同时提高到了1万人。一些网友晒出了好友数量大于5000的证据,不过这并未得到官方确认。在微信帮助平台上,腾讯给出的好友上限数字仍是5000人。 阅读全文

发布于:2021-01-22T18:45:00Z  |  51次阅读  |  详细内容 »

热门Linux命令