Linux系統(tǒng)中使用xargs命令的教程-創(chuàng)新互聯(lián)

本篇內(nèi)容主要講解“Linux系統(tǒng)中使用xargs命令的教程”,感興趣的朋友不妨來看看。本文介紹的方法操作簡(jiǎn)單快捷,實(shí)用性強(qiáng)。下面就讓小編來帶大家學(xué)習(xí)“Linux系統(tǒng)中使用xargs命令的教程”吧!

成都創(chuàng)新互聯(lián)公司是一家專注于成都網(wǎng)站設(shè)計(jì)、網(wǎng)站建設(shè)、外貿(mào)網(wǎng)站建設(shè)與策劃設(shè)計(jì),沙依巴克網(wǎng)站建設(shè)哪家好?成都創(chuàng)新互聯(lián)公司做網(wǎng)站,專注于網(wǎng)站建設(shè)十年,網(wǎng)設(shè)計(jì)領(lǐng)域的專業(yè)建站公司;建站業(yè)務(wù)涵蓋:沙依巴克等地區(qū)。沙依巴克做網(wǎng)站價(jià)格咨詢:18982081108

xargs命令有兩個(gè)要點(diǎn)。第一,你必須列出目標(biāo)文件。第二,你必須指定對(duì)每個(gè)文件需要執(zhí)行的命令或腳本。

這篇教程會(huì)涉及三個(gè)應(yīng)用場(chǎng)景,xargs命令被用來處理分布在不同目錄下的文件:

  1.     計(jì)算所有文件的行數(shù)
        打印指定文件的第一行
        對(duì)每個(gè)文件執(zhí)行一個(gè)自定義腳本

請(qǐng)看下面這個(gè)叫xargstest的目錄(用tree命令以及-i和-f選項(xiàng)顯示了目錄樹結(jié)構(gòu),這樣可以避免縮進(jìn)顯示而且每個(gè)文件都會(huì)帶有完整路徑):

    $ tree -if xargstest/ 
    Linux系統(tǒng)中使用xargs命令的教程

    這六個(gè)文件的內(nèi)容分別如下:
    Linux系統(tǒng)中使用xargs命令的教程

    這個(gè)xargstest目錄,以及它包含的子目錄和文件將用在下面的例子中。
場(chǎng)景1:計(jì)算所有文件的行數(shù)

就像之前提到的,使用xargs命令的第一個(gè)要點(diǎn)是一個(gè)用來運(yùn)行命令或腳本的文件列表。我們可以用find命令來確定和列出目標(biāo)文件。選項(xiàng)-name 'file??'指定了xargstest目錄下那些名字以"file"開頭并跟隨兩個(gè)任意字符的文件才是匹配的。這個(gè)搜索默認(rèn)是遞歸的,意思是find命令會(huì)在xargstest和它的子目錄下搜索匹配的文件。


代碼如下:

$ find xargstest/ -name 'file??'


代碼如下:

xargstest/dir3/file3B
   xargstest/dir3/file3A
   xargstest/dir1/file1A
   xargstest/dir1/file1B
   xargstest/dir2/file2B
   xargstest/dir2/file2A

我們可以通過管道把結(jié)果發(fā)給sort命令讓文件名按順序排列:


代碼如下:

$ find xargstest/ -name 'file??' | sort


代碼如下:

xargstest/dir1/file1A
   xargstest/dir1/file1B
   xargstest/dir2/file2A
   xargstest/dir2/file2B
   xargstest/dir3/file3A
   xargstest/dir3/file3B

然后我們需要第二個(gè)要素,就是需要執(zhí)行的命令。我們使用帶有-l選項(xiàng)的wc命令來計(jì)算每個(gè)文件包含的換行符數(shù)目(會(huì)在輸出的每一行的前面打印出來):


代碼如下:

$ find xargstest/ -name 'file??' | sort | xargs wc -l


代碼如下:

1 xargstest/dir1/file1A
    2 xargstest/dir1/file1B
    3 xargstest/dir2/file2A
    4 xargstest/dir2/file2B
    5 xargstest/dir3/file3A
    6 xargstest/dir3/file3B
   21 total

可以看到,不用對(duì)每個(gè)文件手動(dòng)執(zhí)行一次wc -l命令,而xargs命令可以讓你在一步里完成所有操作。那些之前看起來無法完成的任務(wù),例如單獨(dú)處理數(shù)百個(gè)文件,現(xiàn)在可以相當(dāng)輕松地完成了。
場(chǎng)景2:打印指定文件的第一行

既然你已經(jīng)有一些使用xargs命令的基礎(chǔ),你可以自由選擇執(zhí)行什么命令。有時(shí),你也許希望只對(duì)一部分文件執(zhí)行操作而忽略其他的。在這種情況下,你可以使用find命令的-name選項(xiàng)以及?通配符(匹配任意單個(gè)字符)來選中特定文件并通過管道輸出給xargs命令。舉個(gè)例子,如果你想打印以“B”字符結(jié)尾的文件而忽略以“A”結(jié)尾的文件的第一行,可以使用下面的find、xargs和head命令組合來完成(head -n1會(huì)打印一個(gè)文件的第一行):


代碼如下:

$ find xargstest/ -name 'file?B' | sort | xargs head -n1


代碼如下:

==> xargstest/dir1/file1B <==
   one
   
   ==> xargstest/dir2/file2B <==
   one
   
   ==> xargstest/dir3/file3B <==
   one

你將看到只有以“B”結(jié)尾的文件會(huì)被處理,而所有以“A”結(jié)尾的文件都被忽略了。
場(chǎng)景3:對(duì)每個(gè)文件執(zhí)行一個(gè)自定義腳本

最后,你也許希望對(duì)一些文件執(zhí)行一個(gè)自定義腳本(例如Bash、Python或是Perl)。要做到這一點(diǎn),只要簡(jiǎn)單地用你的自定義腳本名字替換掉之前例子中的wc和head命令就好了:


代碼如下:

$ find xargstest/ -name 'file??' | xargs myscript.sh

自定義腳本myscript.sh需要寫成接受一個(gè)文件名作為參數(shù)并處理這個(gè)文件。上面的命令將為find命令找到的每個(gè)文件分別調(diào)用腳本。

注意一下上面的例子中的文件名并沒有包含空格。通常來說,在Linux環(huán)境下操作沒有空格的文件名會(huì)舒服很多。如果你實(shí)在是需要處理名字中帶有空格的文件,上邊的命令就不能用了,需要稍微處理一下來讓它可以被接受。這可以通過find命令的-print0選項(xiàng)(它會(huì)打印完整的文件名到標(biāo)準(zhǔn)輸出,并以空字符結(jié)尾),以及xargs命令的-0選項(xiàng)(它會(huì)以空字符作為字符串結(jié)束標(biāo)記)來實(shí)現(xiàn),就像下面的例子:


代碼如下:

$ find xargstest/ -name 'file*' -print0 | xargs -0 myscript.sh

注意一下,-name選項(xiàng)所跟的參數(shù)已經(jīng)改為'file*',意思是所有以"file"開頭而結(jié)尾可以是任意字符的文件都會(huì)被選中。



到此,相信大家對(duì)“Linux系統(tǒng)中使用xargs命令的教程”有了更深的了解,不妨來實(shí)際操作一番吧!這里是創(chuàng)新互聯(lián)建站,更多相關(guān)內(nèi)容可以進(jìn)入相關(guān)頻道進(jìn)行查詢,關(guān)注我們,繼續(xù)學(xué)習(xí)!

新聞名稱:Linux系統(tǒng)中使用xargs命令的教程-創(chuàng)新互聯(lián)
分享URL:http://muchs.cn/article32/dhgdpc.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供網(wǎng)站策劃、網(wǎng)站建設(shè)、App設(shè)計(jì)、服務(wù)器托管、網(wǎng)站排名、外貿(mào)建站

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如需處理請(qǐng)聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來源: 創(chuàng)新互聯(lián)

商城網(wǎng)站建設(shè)