請聽題,有一個文件里面有 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