xargs命令是给其他命令传递参数的一个过滤器,也是组合多个命令的一个工具。它擅长将标准输入数据转换成命令行参数,xargs能够处理管道或者stdin并将其转换成特定命令的命令参数。
xargs也可以将单行或多行文本输入转换为其他格式,例如多行变单行,单行变多行。xargs的默认命令是echo,空格是默认定界符。这意味着通过管道传递给xargs的输入将会包含换行和空白,不过通过xargs的处理,换行和空白将被空格取代。xargs是构建单行命令的重要组件之一。
一、基本用法
xargs用作替换工具,读取输入数据重新格式化后输出。-n
选项指定换行,-d
选项指定分隔符。
1 2 3 4 5 6 7 8 9 10 11 12 |
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一个更常见的用法是通过管道将命令输出作为另外一个命令的参数,对于一些无法直接通过管道来获取输入的命令来说十分适用。
1 2 3 4 5 6 7 8 |
# 创建测试文件 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
选项和标识符{}
来占位:
1 2 3 4 5 6 7 8 9 10 |
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
文件夹:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 |
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 |
评论