日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

xargs 命令教程

發(fā)布時間:2025/3/8 编程问答 28 豆豆
生活随笔 收集整理的這篇文章主要介紹了 xargs 命令教程 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

xargs 命令教程

轉(zhuǎn)自:http://www.ruanyifeng.com/blog/2019/08/xargs-tutorial.html

作者: 阮一峰

日期: 2019年8月 8日

xargs是 Unix 系統(tǒng)的一個很有用的命令,但是常常被忽視,很多人不了解它的用法。

本文介紹如何使用這個命令。

一、標準輸入與管道命令

Unix 命令都帶有參數(shù),有些命令可以接受"標準輸入"(stdin)作為參數(shù)。

$ cat /etc/passwd | grep root

上面的代碼使用了管道命令(|)。管道命令的作用,是將左側(cè)命令(cat /etc/passwd)的標準輸出轉(zhuǎn)換為標準輸入,提供給右側(cè)命令(grep root)作為參數(shù)。

因為grep命令可以接受標準輸入作為參數(shù),所以上面的代碼等同于下面的代碼。

$ grep root /etc/passwd

但是,大多數(shù)命令都不接受標準輸入作為參數(shù),只能直接在命令行輸入?yún)?shù),這導致無法用管道命令傳遞參數(shù)。舉例來說,echo命令就不接受管道傳參。

$ echo "hello world" | echo

上面的代碼不會有輸出。因為管道右側(cè)的echo不接受管道傳來的標準輸入作為參數(shù)。

二、xargs 命令的作用

xargs命令的作用,是將標準輸入轉(zhuǎn)為命令行參數(shù)。

$ echo "hello world" | xargs echo hello world

上面的代碼將管道左側(cè)的標準輸入,轉(zhuǎn)為命令行參數(shù)hello world,傳給第二個echo命令。

xargs命令的格式如下。

$ xargs [-options] [command]

真正執(zhí)行的命令,緊跟在xargs后面,接受xargs傳來的參數(shù)。

xargs的作用在于,大多數(shù)命令(比如rm、mkdir、ls)與管道一起使用時,都需要xargs將標準輸入轉(zhuǎn)為命令行參數(shù)。

$ echo "one two three" | xargs mkdir

上面的代碼等同于mkdir one two three。如果不加xargs就會報錯,提示mkdir缺少操作參數(shù)。

三、xargs 的單獨使用

xargs后面的命令默認是echo。

$ xargs # 等同于 $ xargs echo

大多數(shù)時候,xargs命令都是跟管道一起使用的。但是,它也可以單獨使用。

輸入xargs按下回車以后,命令行就會等待用戶輸入,作為標準輸入。你可以輸入任意內(nèi)容,然后按下Ctrl d,表示輸入結(jié)束,這時echo命令就會把前面的輸入打印出來。

$ xargs hello (Ctrl + d) hello

再看一個例子。

$ xargs find -name "*.txt" ./foo.txt ./hello.txt

上面的例子輸入xargs find -name以后,命令行會等待用戶輸入所要搜索的文件。用戶輸入"*.txt",表示搜索當前目錄下的所有 TXT 文件,然后按下Ctrl d,表示輸入結(jié)束。這時就相當執(zhí)行find -name *.txt。

四、-d 參數(shù)與分隔符

默認情況下,xargs將換行符和空格作為分隔符,把標準輸入分解成一個個命令行參數(shù)。

$ echo "one two three" | xargs mkdir

上面代碼中,mkdir會新建三個子目錄,因為xargs將one two three分解成三個命令行參數(shù),執(zhí)行mkdir one two three。

-d參數(shù)可以更改分隔符。

$ echo -e "a\tb\tc" | xargs -d "\t" echo a b c

上面的命令指定制表符\t作為分隔符,所以a\tb\tc就轉(zhuǎn)換成了三個命令行參數(shù)。echo命令的-e參數(shù)表示解釋轉(zhuǎn)義字符。

五、-p 參數(shù),-t 參數(shù)

使用xargs命令以后,由于存在轉(zhuǎn)換參數(shù)過程,有時需要確認一下到底執(zhí)行的是什么命令。

-p參數(shù)打印出要執(zhí)行的命令,詢問用戶是否要執(zhí)行。

$ echo 'one two three' | xargs -p touch touch one two three ?...

上面的命令執(zhí)行以后,會打印出最終要執(zhí)行的命令,讓用戶確認。用戶輸入y以后(大小寫皆可),才會真正執(zhí)行。

-t參數(shù)則是打印出最終要執(zhí)行的命令,然后直接執(zhí)行,不需要用戶確認。

$ echo 'one two three' | xargs -t rm rm one two three

六、-0 參數(shù)與 find 命令

由于xargs默認將空格作為分隔符,所以不太適合處理文件名,因為文件名可能包含空格。

find命令有一個特別的參數(shù)-print0,指定輸出的文件列表以null分隔。然后,xargs命令的-0參數(shù)表示用null當作分隔符。

$ find /path -type f -print0 | xargs -0 rm

上面命令刪除/path路徑下的所有文件。由于分隔符是null,所以處理包含空格的文件名,也不會報錯。

還有一個原因,使得xargs特別適合find命令。有些命令(比如rm)一旦參數(shù)過多會報錯"參數(shù)列表過長",而無法執(zhí)行,改用xargs就沒有這個問題,因為它對每個參數(shù)執(zhí)行一次命令。

$ find . -name "*.txt" | xargs grep "abc"

上面命令找出所有 TXT 文件以后,對每個文件搜索一次是否包含字符串a(chǎn)bc。

七、-L 參數(shù)

如果標準輸入包含多行,-L參數(shù)指定多少行作為一個命令行參數(shù)。

$ xargs find -name "*.txt" "*.md" find: paths must precede expression: `*.md'

上面命令同時將"*.txt"和*.md兩行作為命令行參數(shù),傳給find命令導致報錯。

使用-L參數(shù),指定每行作為一個命令行參數(shù),就不會報錯。

$ xargs -L 1 find -name "*.txt" ./foo.txt ./hello.txt "*.md" ./README.md

上面命令指定了每一行(-L 1)作為命令行參數(shù),分別運行一次命令(find -name)。

下面是另一個例子。

$ echo -e "a\nb\nc" | xargs -L 1 echo a b c

上面代碼指定每行運行一次echo命令,所以echo命令執(zhí)行了三次,輸出了三行。

八、-n 參數(shù)

-L參數(shù)雖然解決了多行的問題,但是有時用戶會在同一行輸入多項。

$ xargs find -name "*.txt" "*.md" find: paths must precede expression: `*.md'

上面的命令將同一行的兩項作為命令行參數(shù),導致報錯。

-n參數(shù)指定每次將多少項,作為命令行參數(shù)。

$ xargs -n 1 find -name

上面命令指定將每一項(-n 1)標準輸入作為命令行參數(shù),分別執(zhí)行一次命令(find -name)。

下面是另一個例子。

$ echo {0..9} | xargs -n 2 echo 0 1 2 3 4 5 6 7 8 9

上面命令指定,每兩個參數(shù)運行一次echo命令。所以,10個阿拉伯數(shù)字運行了五次echo命令,輸出了五行。

九、-I 參數(shù)

如果xargs要將命令行參數(shù)傳給多個命令,可以使用-I參數(shù)。

-I指定每一項命令行參數(shù)的替代字符串。

$ cat foo.txt one two three$ cat foo.txt | xargs -I file sh -c 'echo file; mkdir file' one two three$ ls one two three

上面代碼中,foo.txt是一個三行的文本文件。我們希望對每一項命令行參數(shù),執(zhí)行兩個命令(echo和mkdir),使用-I file表示file是命令行參數(shù)的替代字符串。執(zhí)行命令時,具體的參數(shù)會替代掉echo file; mkdir file里面的兩個file。

十、–max-procs 參數(shù)

xargs默認只用一個進程執(zhí)行命令。如果命令要執(zhí)行多次,必須等上一次執(zhí)行完,才能執(zhí)行下一次。

--max-procs參數(shù)指定同時用多少個進程并行執(zhí)行命令。--max-procs 2表示同時最多使用兩個進程,--max-procs 0表示不限制進程數(shù)。

$ docker ps -q | xargs -n 1 --max-procs 0 docker kill

上面命令表示,同時關閉盡可能多的 Docker 容器,這樣運行速度會快很多。

十一、參考鏈接

  • Linux and Unix xargs command tutorial with examples, George Ornbo
  • 8 Practical Examples of Linux Xargs Command for Beginners, Himanshu Arora

總結(jié)

以上是生活随笔為你收集整理的xargs 命令教程的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。