请听题,有一个文件里面有 20个 URL,请编写一个命令,分别请求这些URL。文件内容如下,文件名(urls.txt)。
https://www.baidu.com
https://www.google.com
https://www.alibaba.com
https://www.qq.com
https://www.mi.com
....
我们刚刚学了 每个程序员都应该懂点 cURL,那么我们第一个想到的解法是循环文本,然后获取每一个 URL 进行 cURL命令,程序如下。
for i in `cat urls.txt`
do
curl $i
done
这样通过最直接的循环解决了问题,我还有更简单的办法,通过 xargs
cat urls.txt | xargs curl
是不是很简单?那么接下来就讲讲 xargs
到底是什么鬼。
xargs
命令的作用,是将标准输入转为命令行参数,简单的说就是把 cat urls.txt
输出的内容分别作为 curl
命令的参数。
应用场景
xargs
用三种用法
- 分隔数据,避免参数过长
- 传递参数,从而组合多个命令
- 不支持管道的命令
分割数据
通过命令罗列一下指定目录下面文件,下面的命令可以把 ~/Code
下面的所有一级目录的文件罗列清楚,非常方面逐层的查找文件
find ~/Code -maxdepth 1 | xargs ls -l
传递参数
假设一个网站ID从1到100个用户,需要请求一下验证是否正确,可以通过下面的命令测试。
echo {1..100} | xargs -p -n1 -Ii curl https://api.example.com/i
其中 -I
后面的 i
是用来接收前面 1-100 的变量内容,赋值给后面的 curl https://api.example.com/i
的 i
,其中 -t
参数不是这个例子的关键参数,这个参数是为了在运行命令的时候打印出来具体的命令,让我们确定使用的对,相当于 debug。具体输出内容如下
echo {1..100} | xargs -p -n1 -Ii curl https://api.example.com/i
curl https://ap1.example.com/1?...
curl https://ap2.example.com/2?...
curl https://ap3.example.com/3?...
curl https://ap4.example.com/4?...
curl https://ap5.example.com/5?...
curl https://ap6.example.com/6?...
管道命令
最后一个用途是挽救不支持管道的命令,比如如下命令,mkdir
不支持管道,所以我们可以传递参数给它。
echo "one two three" | xargs mkdir
上面代码中,mkdir
会新建三个子目录,因为 xargs
将 one
two
three
分解成三个命令行参数,执行 mkdir
one
two
three
本文转载自:据说学了 xargs 命令关键时候还能装B
文章来源: 博客园
- 还没有人评论,欢迎说说您的想法!