在Linux作業系統裡使用xargs命令

2021-06-28 08:50:59 字數 2348 閱讀 2548

你是否遇到過這樣的情況,需要一遍又一遍地對多個檔案執行同樣的操作?如果有過,那你肯定會深有感觸這是多麼的無聊和效率低下。還好有種簡單的方式,可以在基於unix的作業系統中使用xargs命令

linux作業系統詳解(linux不再難懂)

xargs命令

有兩個要點。第一,你必須列出目標檔案。第二,你必須指定對每個檔案需要執行的命令或指令碼。

這篇教程會涉及三個應用場景,xargs命令

被用來處理分布在不同目錄下的檔案:

1:計算所有檔案的行數

2:列印指定檔案的第一行

3:對每個檔案執行乙個自定義指令碼

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

這六個檔案的內容分別如下:

這個xargstest目錄,以及它包含的子目錄和檔案將用在下面的例子中。

就像之前提到的,使用xargs命令的第乙個要點是乙個用來執行命令或指令碼的檔案列表。我們可以用find命令來確定和列出目標檔案。選項-name 'file??'指定了xargstest目錄下那些名字以"file"開頭並跟隨兩個任意字元的檔案才是匹配的。這個搜尋預設是遞迴的,意思是find命令會在xargstest和它的子目錄下搜尋匹配的檔案。

我們可以通過管道把結果發給sort命令讓檔名按順序排列:

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

可以看到,不用對每個檔案手動執行一次wc -l命令,而xargs命令可以讓你在一步裡完成所有操作。那些之前看起來無法完成的任務,例如單獨處理數百個檔案,現在可以相當輕鬆地完成了。

既然你已經有一些使用xargs命令的基礎,你可以自由選擇執行什麼命令。有時,你也許希望只對一部分檔案執行操作而忽略其他的。在這種情況下,你可以使用find命令的-name選項以及?萬用字元(匹配任意單個字元)來選中特定檔案並通過管道輸出給xargs命令。舉個例子,如果你想列印以「b」字元結尾的檔案而忽略以「a」結尾的檔案的第一行,可以使用下面的find、xargs和head命令組合來完成(head -n1會列印乙個檔案的第一行):

你將看到只有以「b」結尾的檔案會被處理,而所有以「a」結尾的檔案都被忽略了。

最後,你也許希望對一些檔案執行乙個自定義指令碼(例如bash、python或是perl)。要做到這一點,只要簡單地用你的自定義指令碼名字替換掉之前例子中的wc和head命令就好了:

自定義指令碼myscript.sh需要寫成接受乙個檔名作為引數並處理這個檔案。上面的命令將為find命令找到的每個檔案分別呼叫指令碼。

注意一下上面的例子中的檔名並沒有包含空格。通常來說,在linux

環境下操作沒有空格的檔名會舒服很多。如果你實在是需要處理名字中帶有空格的檔案,上邊的命令就不能用了,需要稍微處理一下來讓它可以被接受。這可以通過find命令的-print0選項(它會列印完整的檔名到標準輸出,並以空字元結尾),以及xargs命令的-0選項(它會以空字元作為字串結束標記)來實現,就像下面的例子:

注意一下,-name選項所跟的引數已經改為'file*',意思是所有以"file"開頭而結尾可以是任意字元的檔案都會被選中。

總結

在windows作業系統中使用linux

cygwin可以幫助使用者在windows作業系統中使用linux。1 供初學者學習linux 2 完成某些僅linux作業系統中能執行的操作 例如要壓縮檔案為tar.gz格式,可使用下面命令 tar zcvf tar xvzf c create a new archive x extract fi...

Linux作業系統使用

作業系統 os 是管理計算機硬體與軟體資源的電腦程式,同時也是計算機系統的核心與基石。作業系統需要處理如管理與配置記憶體 決定系統資源供需的優先次序 控制輸入裝置與輸出裝置 操作網路與管理檔案系統等基本事務。作業系統也提供乙個讓使用者與系統互動的操作介面。乙個典型的linux作業系統組成為 linu...

Linux 作業系統的使用

linux版本 centos 7.x 我們通常會在linux 上安裝redis nginx 等。方式兩種 2.通過命令來安裝 yum install redis nginx rpm 命令等 b.關於開機啟動的設定 開機啟動的設定方式有很多 通過rc.local 檔案新增 啟動引用指令碼 實現開機啟動...