Linux命令之 xargs命令
warning:
这篇文章距离上次修改已过1750天,其中的内容可能已经有所变动。
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 | 同时运行至多 |
-p, --interactive | 运行命令前提示 |
--process-slot-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"

用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 {} ..