xargs是execute arguments的縮寫,主要作用是從標準輸入中讀取內容,並將此內容傳遞給它要協助的命令,並作為要協助命令的引數來執行。
基本語法
xargs [選項] [命令]
其常用選項如下:
選項說明
--null ,-0
允許將null作為分隔符
-a file
從檔案讀取項而非標準輸入
-d delim
指定分隔符
-p ,--interactive
交換模式,在執行命令,需要使用者確認是否執行
-n max-args
用於指定每次傳遞多少個引數給其後面的命令
-e eof-str
指定命令結束識別符號
-e eof-str
同 -e eof-str
-i 將replace-str替換為從標準輸入裡讀入的名稱
-i 功能同-i
與管道的區別
我們先來看看兩個例子:
[root@localhost ~]# cat test.txt
this is test text.
[root@localhost ~]# echo test.txt | cat
test.txt
[root@localhost ~]# echo test.txt | xargs cat
this is test text.
[root@localhost ~]# echo "--help" | cat
--help
[root@localhost ~]# echo "--help" | xargs cat
用法:cat [選項]... [檔案]...
將[檔案]或標準輸入組合輸出到標準輸出。
-a, --show-all 等於-vet
-b, --number-nonblank 對非空輸出行編號
-e 等於-ve
-e, --show-ends 在每行結束處顯示"$"
-n, --number 對輸出的所有行編號
-s, --squeeze-blank 不輸出多行空行
-t 與-vt 等價
-t, --show-tabs 將跳格字元顯示為^i
-u (被忽略)
-v, --show-nonprinting 使用^ 和m- 引用,除了lfd和 tab 之外
從上面的例子,我們可以總結如下結論:
在linux中的很多命令都是可以先從命令列引數中獲取引數,然後從標準輸入讀取,最後通過標準輸出顯示結果。而如果想要實現將前面的標準輸出做為後面命令的命令引數,則需要使用命令xargs
示例用法
1、-d選項
[root@localhost ~]# echo '2018-08-11' | xargs echo
2018-08-11
[root@localhost ~]# echo '2018-08-11' | xargs -d '-' echo
2018 08 11
2、-p選項
[root@localhost ~]# echo '2018-08-11' | xargs -d '-' -p echo
echo 2018 08 11
?...y
2018 08 11
3、-n選項
[root@localhost ~]# echo '2018-08-11' | xargs -d '-' -n 1 echo
2018
0811
上述示例中表示xargs每次僅從標準輸入傳遞乙個引數給後面的命令,被分隔後的引數為3個,因此顯示為3行。
4、-e選項
[root@localhost ~]# echo '2018 08 11' | xargs -e '08' echo
2018
[root@localhost ~]# echo '2018-08-11' | xargs -d '-' -e '08' echo
2018 08 11
當xargs解析出多個命令列引數時,如果搜尋到-e指定的命令列引數,則終止並退出。需要注意的是 -e 引數只有在不指定 -d 的時候才有效5、-0選項
-0 選項表示以'\0'為分隔符,一般常與find結合使用
[root@localhost test]# find . -name '*.txt'
./1.txt
./2.txt
./3.txt
./4.txt
./test.txt
# 預設情況find的結果中每條記錄中會新增乙個換行符
[root@localhost test]# find . -name '*.txt' -print0
./1.txt./2.txt./3.txt./4.txt./test.txt
# print0表示顯示的輸出結果後面增加'\0'而不是換行符
[root@localhost test]# find . -name '*.txt' -print0 | xargs -0 echo
./1.txt ./2.txt ./3.txt ./4.txt ./test.txt
[root@localhost test]# find . -name '*.txt' -print0 | xargs -d '\0' echo
./1.txt ./2.txt ./3.txt ./4.txt ./test.txt
# xargs中的-0和-d '\0'表示從標準輸入讀取內容以'\0'進行分隔,因find的結果中是以'\0'進行分隔,所以xargs使用'\0'將find的結果分隔之後得到5個引數,而且引數中間有空格做為間隔。
6、-i選項
[root@localhost test]# find ./ -name '*.txt' | xargs -i cp {} /tmp/temp/
[root@localhost test]# ll /tmp/temp/
總用量 20
-rw-r--r-- 1 root root 6 8月 12 00:10 1.txt
-rw-r--r-- 1 root root 6 8月 12 00:10 2.txt
-rw-r--r-- 1 root root 6 8月 12 00:10 3.txt
-rw-r--r-- 1 root root 6 8月 12 00:10 4.txt
-rw-r--r-- 1 root root 19 8月 12 00:10 test.txt
7、-i選項
[root@localhost test]# find ./ -name '*.txt' | xargs -i {} -i cp {} /tmp/temp/
[root@localhost test]# ll /tmp/temp/
總用量 20
-rw-r--r-- 1 root root 6 8月 12 00:14 1.txt
-rw-r--r-- 1 root root 6 8月 12 00:14 2.txt
-rw-r--r-- 1 root root 6 8月 12 00:14 3.txt
-rw-r--r-- 1 root root 6 8月 12 00:14 4.txt
-rw-r--r-- 1 root root 19 8月 12 00:14 test.txt
-i和-i選項的區別如下所示: Linux基礎教程
主編 張同光 isbn 9787302183600 定價 34元 印刷日期 2008 10 13 出版社 清華大學出版社 圖書簡介 本書以redhat公司的linux最新版本redhat enterprise linux 5.2為藍本,堅持 理論夠用 側重實用 的原則,用案例 來講解每個知識點,對l...
linux基礎教程
使用者和組操作 linux 作業系統之所以穩定 安全,與它的 使用者和組 的管理是分不開的,我先來看下,現實生活中專案組中的簡單管理 給使用者設定操作檔案許可權的工作非常繁瑣,不要落實。linux 建立使用者的時候,會考慮給使用者建立乙個組別 系統增減檔案的時候,也會把乙個檔案劃分為乙個組別裡邊 這...
Linux基礎教程
自海燕部落格 目錄005 shell第一篇 bash 環境 006 shell第二篇 正規表示式和文字處理工具 007 shell第三篇 基本語法 十天快速入門python python從入門到web框架 python爬蟲從入門到框架 python之23種計模式實現 史上最全最通俗易懂 內容整改中 ...