Linux命令之 xargs命令

warning: 这篇文章距离上次修改已过1393天,其中的内容可能已经有所变动。
toc end ->

xargs命令类似于管道,都是将上一条命令的执行结果,传递给后一个命令当参数。

但是有部分命令不支持管道来传递参数,这时就需要xargs命令了。

info:一般来讲xargs命令还是需要配合管道来使用的!

命令语法

xargs [选项]... 命令 [初始参数]...
  • xargs的默认命令是echo,空格是默认定界符
  • xargs可以处理管道和标准输入,输入的内容并将其转换成命令的参数
  • xargs会将管道传递过来的换行和空白转换成空格
  • xargs当然也可实现多行/单行文本内容的互相转换

附加参数

参数说明
-0, --null各个项目由 null(空字符,不是空白字符)分隔;同时停止对引用和反斜杠转义的处理及对逻辑EOF的处理
-a, --arg-file=文件从指定<文件>读取参数,不使用标准输入
-d, --delimiter=分隔用字符输入流的各个项目使用指定<分隔用字符>进行分隔,不使用空白字符;同时停止对引用和反斜杠转义的处理及对逻辑 EOF 的处理
-E 终止符设置逻辑 EOF(逻辑文件末尾)字符串;如果<终止符>作为单独一行输入,所有剩余的输入内容将被忽略(若同时使用了 -0 或 -d 选项,则该选项失效)
-e, --eof[=终止符]在指定<终止符>的情况下与 -E <终止符> 等效;否则,视为文件末尾终止字符串不存在
-i, --replace[=R]将<初始参数>中的 R 替换为从标准输入读取的名称;如果未指定 R,则假定其为{}
-I R和 --replace=R 相同
-L, --max-lines=最大行数每个命令行使用最多<最大行数>行的非空输入行
-l[最大行数]类似 -L,但在没有给出<最大行数>信息时默认为接受最多一行非空输入行
-n, --max-args=最大参数数量设置每个命令行可使用的<最大参数数量>
-o, --open-tty在执行命令之前,在子进程中以/dev/tty的身份重新打开stdin(标准输入);这对于运行交互式应用程序很有用
-P, --max-procs=MAX-PROCS同时运行至多<MAX-PROCS>个进程
-p, --interactive运行命令前提示
--process-slot-var=VAR在子进程中设置环境变量<VAR>
-r, --no-run-if-empty如果没有指定任何参数,则不运行指定的<命令>;如果未给出该选项,指定的<命令>将至少运行一次
-s, --max-chars=最大字符数限制命令行长度的<最大字符数>
--show-limits显示命令行长度的限制
-t, --verbose执行命令前输出命令内容
-x, --exit如果大小(见 -s)超出限制则退出
--help显示帮助信息并退出
--version显示版本信息并退出

常用范例

测试找到文件的类型

find . -type f -print | xargs file

测试找到文件的类型测试找到文件的类型


在整个系统中查找内存信息转储文件(core dump) ,并将结果转存到core.log文件中

find / -name "core" -print | xargs echo "" >~/core.log

在当前目录下查找所有用户具有读、写和执行权限的文件,并收回相应的写权限

find . -perm -7 -print | xargs chmod o -w

用grep命令在所有的普通文件中搜索mx这个词

find . -type f -print | xargs grep "mx"

搜索mx这个词搜索mx这个词


用grep命令在当前目录下的所有普通文件中搜索mx

find . -name \* -type f -print | xargs grep "mx"

使用xargs执行mv命令

find . -name "*.log" | xargs -i mv {} test

find后执行xargs提示xargs: argument line too long解决方法:

find . -type f -atime +0 -print0 | xargs -0 -l1 -t rm -f

自定义输出内容标记

find . -name "file" | xargs -I [] cp [] ..
info:使用-i参数默认的前面输出用{}代替,-I参数可以指定其他代替字符,如例子中的[]

xargs的-p参数的使用

find . -name "*.log" | xargs -p -i mv {} ..
评论已关闭