佳木斯湛栽影视文化发展公司

主頁 > 知識庫 > 在Linux系統(tǒng)中使用xargs命令的教程

在Linux系統(tǒng)中使用xargs命令的教程

熱門標簽:家政服務(wù)網(wǎng)絡(luò) 服務(wù)器配置 硅谷的囚徒呼叫中心 美團 百度競價點擊價格的計算公式 解決方案 電話機器人搭建 外呼系統(tǒng)

你是否遇到過這樣的情況,需要一遍又一遍地對多個文件執(zhí)行同樣的操作?如果有過,那你肯定會深有感觸這是多么的無聊和效率低下。還好有種簡單的方式,可以在基于Unix的操作系統(tǒng)中使用xargs命令解決這個煩惱。通過這個命令你可以有效地處理多個文件,節(jié)省你的時間和精力。在這篇教程中,你可以學(xué)到如何一次性對多個文件執(zhí)行命令或腳本操作,再也不用擔(dān)心像單獨處理無數(shù)個日志或數(shù)據(jù)文件那樣嚇人的任務(wù)了。
xargs命令有兩個要點。第一,你必須列出目標文件。第二,你必須指定對每個文件需要執(zhí)行的命令或腳本。

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

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

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

    $ tree -if xargstest/ 
    

    這六個文件的內(nèi)容分別如下:
    

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

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

   

復(fù)制代碼
代碼如下:
$ find xargstest/ -name 'file??'

   

復(fù)制代碼
代碼如下:
xargstest/dir3/file3B
xargstest/dir3/file3A
xargstest/dir1/file1A
xargstest/dir1/file1B
xargstest/dir2/file2B
xargstest/dir2/file2A

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

   

復(fù)制代碼
代碼如下:
$ find xargstest/ -name 'file??' | sort

   

復(fù)制代碼
代碼如下:
xargstest/dir1/file1A
xargstest/dir1/file1B
xargstest/dir2/file2A
xargstest/dir2/file2B
xargstest/dir3/file3A
xargstest/dir3/file3B

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

   

復(fù)制代碼
代碼如下:
$ find xargstest/ -name 'file??' | sort | xargs wc -l

    

復(fù)制代碼
代碼如下:
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

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

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

   

復(fù)制代碼
代碼如下:
$ find xargstest/ -name 'file?B' | sort | xargs head -n1

   

復(fù)制代碼
代碼如下:
==> xargstest/dir1/file1B ==
one

==> xargstest/dir2/file2B ==
one

==> xargstest/dir3/file3B ==
one

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

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

   

復(fù)制代碼
代碼如下:
$ find xargstest/ -name 'file??' | xargs myscript.sh

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

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

   

復(fù)制代碼
代碼如下:
$ find xargstest/ -name 'file*' -print0 | xargs -0 myscript.sh

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

在看完這篇教程后你應(yīng)該會理解xargs命令的作用,以及如何應(yīng)用到自己的工作中。很快你就可以有時間享受這個命令所帶來的高效率,而不用把你的時間耗費在一些重復(fù)的任務(wù)上了。想了解更詳細的信息以及更多的選項,你可以在終端中輸入'man xargs'命令來查看xargs的文檔。

標簽:韶關(guān) 防城港 北海 烏蘭察布 南昌 撫州 臨沂 邢臺

巨人網(wǎng)絡(luò)通訊聲明:本文標題《在Linux系統(tǒng)中使用xargs命令的教程》,本文關(guān)鍵詞  ;如發(fā)現(xiàn)本文內(nèi)容存在版權(quán)問題,煩請?zhí)峁┫嚓P(guān)信息告之我們,我們將及時溝通與處理。本站內(nèi)容系統(tǒng)采集于網(wǎng)絡(luò),涉及言論、版權(quán)與本站無關(guān)。
  • 相關(guān)文章
  • 收縮
    • 微信客服
    • 微信二維碼
    • 電話咨詢

    • 400-1100-266
    江永县| 贺州市| 读书| 遵义市| 嵩明县| 策勒县| 巴南区| 乌拉特中旗| 梁平县| 临漳县| 延津县| 香格里拉县| 武夷山市| 元谋县| 军事| 天津市| 肥西县| 张家界市| 花垣县| 海南省| 旬阳县| 班戈县| 轮台县| 专栏| 洱源县| 海南省| 来宾市| 长兴县| 晋州市| 眉山市| 英山县| 濮阳市| 扎赉特旗| 安多县| 北安市| 安龙县| 中宁县| 石泉县| 阿克陶县| 哈密市| 盐池县|