xargs命令是给其他命令传递参数的一个过滤器,也是组合多个命令的一个工具。它擅长将标准输入数据转换成命令行参数,xargs能够处理管道或者stdin并将其转换成特定命令的命令参数。
xargs也可以将单行或多行文本输入转换为其他格式,例如多行变单行,单行变多行。xargs的默认命令是echo,空格是默认定界符。这意味着通过管道传递给xargs的输入将会包含换行和空白,不过通过xargs的处理,换行和空白将被空格取代。xargs是构建单行命令的重要组件之一。
一、基本用法
xargs用作替换工具,读取输入数据重新格式化后输出。-n
选项指定换行,-d
选项指定分隔符。
ma@ubuntu:/tmp$ cat tmp # 测试文本内容
a b c d e f
gh i jkl
ma@ubuntu:/tmp$ cat tmp | xargs # 重新格式化输出
a b c d e f gh i jkl
ma@ubuntu:/tmp$ cat tmp | xargs -n 3 # 每三个换行
a b c
d e f
gh i jkl
ma@ubuntu:/tmp$ echo "abcXdefXghiXjkl" | xargs -n3 -dX # 以字符X分隔,每三个换行
abc def ghi
jkl
二、命令行参数
xargs一个更常见的用法是通过管道将命令输出作为另外一个命令的参数,对于一些无法直接通过管道来获取输入的命令来说十分适用。
# 创建测试文件
ma@ubuntu:/tmp$ touch a.txt b.txt c.txt d.txt
ma@ubuntu:/tmp$ ls *.txt
a.txt b.txt c.txt d.txt
# 把ls出来的结果全部删除掉
ma@ubuntu:/tmp$ ls *.txt | xargs rm
ma@ubuntu:/tmp$ ls *.txt
ls: cannot access ''*.txt'': No such file or director
对于像cp
这种有源目地址的命令来说需要通过-i
选项和标识符{}
来占位:
ma@ubuntu:/tmp/maqian$ touch a.txt b.txt c.txt d.txt
ma@ubuntu:/tmp/maqian$ tree
.
├── a.txt
├── b.txt
├── c.txt
├── d.txt
└── tmp
1 directory, 4 files
把所有的txt
文件复制到tmp
文件夹:
ma@ubuntu:/tmp/maqian$ ls *.txt | xargs -i cp {} tmp/
ma@ubuntu:/tmp/maqian$ tree
.
├── a.txt
├── b.txt
├── c.txt
├── d.txt
└── tmp
├── a.txt # 文件都已经复制过来了
├── b.txt
├── c.txt
└── d.txt
1 directory, 8 files
此处评论已关闭