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

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 运维知识 > linux >内容正文

linux

linux下xargs命令用法详解

發(fā)布時間:2023/12/9 linux 36 豆豆
生活随笔 收集整理的這篇文章主要介紹了 linux下xargs命令用法详解 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

From:http://biancheng.dnbcw.info/shell/268829.html


xargs在 linux中是個很有用的命令,它經(jīng)常和其他命令組合起來使用,非常的靈活.
xargs是給命令傳遞參數(shù)的一個過濾器,也是組合多個命令的一個工具.它把一個數(shù)據(jù)流分割為一些足夠小的塊,以方便過濾器和命令進(jìn)行處理.由此這個命令也是后置引用的一個強(qiáng)有力的替換.在一般使用過多參數(shù)的命令替換失敗的時候,用xargs來替換它一般都能成功.通常情況下,xargs從管道或者stdin中讀取數(shù)據(jù),但是它也能夠從文件的輸出中讀取數(shù)據(jù).
xargs的默認(rèn)命令是echo.這意味著通過管道傳遞給xargs的輸入將會包含換行和空白,不過通過xargs的處理,換行和空白將被空格取代.如:
bash$ ls -l
total 0
-rwxr-xr-x 2 root root 4096 2009-02-23 090218.txt
-rwxr-xr-x 2 root root 12288 2009-06-08 090607.txt
bash$ ls -l | xargs
090218.txt 090607.txt
bash$ find ~/mail -type f | xargs grep "Linux"
./misc:User-Agent: slrn/0.9.8.1 (Linux)
./sent-mail-jul-2005: hosted by the Linux Documentation Project.
./sent-mail-jul-2005: (Linux Documentation Project Site, rtf version)
./sent-mail-jul-2005: Subject: Criticism of Bozo's Windows/Linux article
. . .
ls | xargs -p -l gzip 使用gzips壓縮當(dāng)前目錄下的每個文件,一次壓縮一個, 并且在每次壓縮前都提示用戶.
注意: 一個有趣的xargs選項是-n NN,NN是限制每次傳遞進(jìn)來參數(shù)的個數(shù).
ls | xargs -n 8 echo以每行8列的形式列出當(dāng)前目錄下的所有文件.
注意: 另一個有用的選項是-0,使用 find -print0 或 grep -lZ 這兩種組合方式. 這允許處理包含空白或引號的參數(shù).
find / -type f -print0 | xargs -0 grep -liwZ GUI | xargs -0 rm -f
grep -rliwZ GUI / | xargs -0 rm -f
上邊兩行都可以用來刪除任何包含"GUI"的文件。
-i 表示 find 傳遞給xargs的結(jié)果 由{}來代替
-I 我認(rèn)為是和i差不多,可以這么認(rèn)為 -i可以用-I {} 來代替
-p 交互式提問y來確認(rèn)命令的每次執(zhí)行。
-t 在執(zhí)行前回顯各個command
還有參數(shù)-s 和 -x 具體查手冊.

下面是另一個示例,我們希望計算這些文件中的行數(shù):

$ file * | grep ASCII | cut -d":"-f1 | xargs wc -l

47853 alert_DBA102.log

19 dba102_cjq0_14493.trc

29053dba102_mmnl_14497.trc

154 dba102_reco_14491.trc

43 dba102_rvwr_14518.trc

77122total

(注:上述任務(wù)還可用以下命令完成:)?

$ wc -l ‘file * | grep ASCII | cut-d":" -f1 | grep ASCII | cut -d":" -f1‘

該 xargs 版本用于闡釋概念。Linux 可以用幾種方法來完成同一個任務(wù);請使用最適合您的情況的方法。

使用該方法,您可以快速重命名目錄中的文件。

$ ls | xargs -t -i mv {} {}.bak

-i 選項告訴 xargs 用每項的名稱替換 {}。-t 選項指示 xargs 先打印命令,然后再執(zhí)行。

另一個非常有用的操作是當(dāng)您使用 vi 打開要編輯的文件時:

$ file * | grep ASCII | cut -d":"-f1 | xargs vi

該命令使用 vi 逐個打開文件。當(dāng)您希望搜索多個文件并打開它們進(jìn)行編輯時,使用該命令非常方便。

它還有幾個選項。最有用的可能是 -p 選項,它使操作具有可交互性:

$ file * | grep ASCII | cut -d":"-f1 | xargs -p vi

vi alert_DBA102.log dba102_cjq0_14493.trcdba102_mmnl_14497.trc

dba102_reco_14491.trc dba102_rvwr_14518.trc?...

此處的 xarg 要求您在運(yùn)行每個命令之前進(jìn)行確認(rèn)。如果您按下 "y",則執(zhí)行命令。當(dāng)您對文件進(jìn)行某些可能有破壞且不可恢復(fù)的操作(如刪除或覆蓋)時,您會發(fā)現(xiàn)該選項非常有用。

-t 選項使用一個詳細(xì)模式;它顯示要運(yùn)行的命令,是調(diào)試過程中一個非常有幫助的選項。?

如果傳遞給 xargs 的輸出為空怎么辦?考慮以下命令:

$ file * | grep SSSSSS | cut-d":" -f1 | xargs -t wc -l wc -l 0 $

在此處,搜索 "SSSSSS"后沒有匹配的內(nèi)容;因此 xargs 的輸入均為空,如第二行所示(由于我們使用 -t 這個詳細(xì)選項而產(chǎn)生的結(jié)果)。雖然這可能會有所幫助,但在某些情況下,如果沒有要處理的內(nèi)容,您可能希望停止 xargs;如果是這樣,可以使用 -r 選項:

$ file * | grep SSSSSS | cut -d":" -f1 | xargs -t -r wc -l$

如果沒有要運(yùn)行的內(nèi)容,該命令退出。

假設(shè)您希望使用 rm 命令(該命令將作為 xargs 命令的參數(shù))刪除文件。然而,rm 只能接受有限數(shù)量的參數(shù)。如果您的參數(shù)列表超出該限制怎么辦?xargs 的 -n 選項限制單個命令行的參數(shù)個數(shù)。?

下面顯示了如何限制每個命令行僅使用兩個參數(shù):即使向 xargs ls -ltr 傳遞五個文件,但每次向 ls -ltr 僅傳遞兩個文件。

$ file * | grep ASCII | cut -d":"-f1 | xargs -t -n2 ls -ltr

ls -ltr alert_DBA102.log dba102_cjq0_14493.trc

-rw-r----- 1 oracle dba 738 Aug 10 19:18 dba102_cjq0_14493.trc

-rw-r--r-- 1oracle dba 2410225 Aug 13 05:31 alert_DBA102.log

ls -ltr dba102_mmnl_14497.trcdba102_reco_14491.trc

-rw-r----- 1 oracle dba 5386163 Aug 10 17:55 dba102_mmnl_14497.trc

-rw-r----- 1 oracle dba 6808 Aug 13 05:21 dba102_reco_14491.trc

ls -ltrdba102_rvwr_14518.trc

-rw-r----- 1 oracle dba 2087 Aug 10 04:30dba102_rvwr_14518.trc

使用該方法,您可以快速重命名目錄中的文件。

總結(jié)

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

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