zoukankan      html  css  js  c++  java
  • linux_xargs入门介绍_及和for循环命令区别

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

  • 相关阅读:
    leetcode第9题判断回文数
    leetcode整数反转第七题
    leetcode刷题两数之和
    找工作之旅
    C#和.Ne学习第五天
    C#和.Ne学习第四天
    C#和.Ne学习第三天
    C#和.Ne学习第二天
    C#和.Ne学习第一天
    从今天开始正事学习C#和.Net了
  • 原文地址:https://www.cnblogs.com/lxhbky/p/13598921.html
Copyright © 2011-2022 走看看