xargs

linux命令可以从两个地方读取要处理的内容:

命令行参数

标准输入

我们知道管道可以把标准输出重定向到下一个命令的标准输入。

但是有些命令只从命令行参数读取内容,而参数内容可能是保存在文件中的或者需要其他命令输出的,这时这些命令就读取不到参数了。例如echo

# 没有输出
echo "hello world" | echo

xargs可以把标准输入作为后面命令的命令行参数,例如:

# cat 打印输入的内容
[root@nat1 ~]# echo '--help' | cat
--help

# 相当于执行 cat --help
[root@nat1 ~]# echo '--help' | xargs cat
Usage: cat [OPTION]... [FILE]...
Concatenate FILE(s), or standard input, to standard output.

  -A, --show-all           equivalent to -vET
  <省略...>

# 手动输入的内容作为了cat的参数
[root@nat1 ~]# xargs cat <<EOF
> --help
> EOF
用法:cat [选项]... [文件]...
连接所有指定文件并将结果写到标准输出。
<省略...>

-d 选项 :可以自定义一个定界符; 默认情况下xargs将其标准输入中的内容以空白(包括空格、Tab、回车换行等)分割成多个之后当作命令行参数传递给其后面的命令,并运行之,我们可以使用 -d 命令指定分隔符

# xargs默认动作是echo,所以可以不指定命令
[root@nat1 ~]# echo ‘11@22@33’ | xargs
‘11@22@33’
[root@nat1 ~]# echo ‘11@22@33’ | xargs -d @
‘11 22 33

-n 选项:该选项表示将xargs生成的命令行参数,每次传递几个参数给其后面的命令执行

[root@nat1 ~]# echo '11@22@33@44@55@66@77@88@99@00' | xargs -d '@' -n 3 echo
11 22 33
44 55 66
77 88 99
00

-E选项:选项指定一个字符串,当xargs解析出多个命令行参数的时候,如果搜索到-e指定的命令行参数,则只会将-e指定的命令行参数之前的参数(不包括-e指定的这个参数)传递给xargs后面的命令

[root@nat1 ~]# echo '11 22 33' | xargs -E 33 echo
11 22

-i 选项:把传递给命令的参数使用{}表示

# 为目录下的所有文件增加.bak后缀
[root@nat1 ~]# ls | xargs -i mv {} {}.bak

-I选项:类似-i,只不过可以自定义占位符

# 为目录下的所有文件增加.bak后缀
[root@nat1 ~]# ls | xargs -I @@ mv @@ @@.bak

-p选项:打印出要执行的命令,询问用户是否要执行

$ echo 'one two three' | xargs -p touch
touch one two three ?...

-t选项:打印出最终要执行的命令,然后直接执行,不需要用户确认

$ echo 'one two three' | xargs -t rm
rm one two three

-L选项:指定多少行作为一个命令行参数

$ xargs -L 1 find . -name
"*.txt"
./foo.txt
./hello.txt
"*.md"
./README.md

–max-procs选项:指定同时用多少个进程并行执行命令,默认是1

$ docker ps -q | xargs -n 1 --max-procs 0 docker kill
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值