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


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM