请听题,有一个文件里面有 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

内容来源于网络如有侵权请私信删除

文章来源: 博客园

原文链接: https://www.cnblogs.com/lxhbky/p/13598921.html

你还没有登录,请先登录注册
  • 还没有人评论,欢迎说说您的想法!

相关课程