前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Linux中的xargs

Linux中的xargs

作者头像
mwangblog
发布2018-07-04 11:23:09
2.4K0
发布2018-07-04 11:23:09
举报
文章被收录于专栏:mwangblog

Linux中的xargs

xargs将参数作为标准输入传递给指定程序。它的一个应用场景是:一些程序无法从管道中读取输入,比如rmkill等等,在需要使用管道时,可以使用xargs命令。

下面的例子中,ls -l命令并不会理会now.txt,而是直接输出目录中的文件列表:

代码语言:javascript
复制
$ echo 'now.txt' | ls -l
total 2072
-rw-rw-r-- 1 tom tom 2097152 Jun 12 14:43 2M.file
drwxrwxrwx 2 tom tom    4096 May 31 16:42 a
-rwxrwxr-x 1 tom tom      10 Jun 12 14:56 a.txt
drwxrwxrwx 2 tom tom    4096 May 29  2017 bin
drwxrwxrwx 5 tom tom    4096 Jun  5 17:25 homework
drwxrwxrwx 3 tom tom    4096 May 12 10:37 name
-rwxrwxr-x 1 tom tom      14 Jun 12 12:18 now.txt

可以使用xargs处理这个情况,用管道将echo输出传给xargs作为参数,xargs将这些参数作为ls -l的标准输入:

代码语言:javascript
复制
$ echo 'now.txt' | xargs ls -l
-rwxrwxr-x 1 tom tom 14 Jun 12 12:18 now.txt

-i命令选项使xargs具有插入功能,使用{}代表参数的占位符:

代码语言:javascript
复制
$ find -maxdepth 1 -type f '!' -name '.*' | xargs -i mv {} ./backups/{}.bk

这条命令寻找当前目录中所有的普通文件,并将其移动到./backups目录中,每个文件被添加后缀名.bk

使用-t命令选项显示具体执行的命令:

代码语言:javascript
复制
$ echo "now.txt.bk" | xargs -t ls -l
ls -l now.txt.bk
-rwxrwxr-x 1 tom tom 14 Jun 12 12:18 now.txt.bk

在一些情况下,xargs没有从管道中得到内容,但是其之后的命令还是会运行:

代码语言:javascript
复制
$ find ./ -empty
$ find ./ -empty | xargs ls -l
total 2056
-rw-rw-r-- 1 tom tom 2097152 Jun 12 14:43 2M.file.bk
-rwxrwxr-x 1 tom tom      10 Jun 12 14:56 a.txt.bk
-rwxrwxr-x 1 tom tom      14 Jun 12 12:18 now.txt.bk

使用-r命令参数避免这种情况:

代码语言:javascript
复制
$ find ./ -empty | xargs -r ls -l
$
本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2018-06-14,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 mwangblog 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • Linux中的xargs
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档