何時在 Linux 中使用 xargs?


在 Linux 中使用命令列工具時,有很多工具和實用程式可供使用,可以使您的工作更輕鬆。其中一個實用程式是 xargs,這是一個允許您對來自標準輸入的檔案或引數列表執行命令的命令。當您想要對大量檔案執行操作,並且想要快速有效地執行操作時,xargs 特別有用。

在本文中,我們將討論在 Linux 中可能需要使用 xargs 的各種場景。我們還將檢視一些示例來說明如何有效地使用 xargs。

什麼是 xargs?

在我們深入探討 xargs 有用的場景之前,讓我們首先了解什麼是 xargs 以及它是如何工作的。

Xargs 是一個命令列實用程式,允許您從標準輸入讀取專案並將它們用作命令的引數。它獲取引數列表,將其拆分為可管理的塊,並將這些塊傳遞給您指定的命令。當您想要對大量檔案或目錄執行命令時,這尤其有用。

Xargs 有幾個選項允許您控制其操作方式。例如,您可以使用 -n 選項指定 xargs 每次應傳遞給命令的引數數量。您還可以使用 -I 選項指定一個佔位符,xargs 應該用它正在處理的引數替換該佔位符。

現在我們對 xargs 有了基本的瞭解,讓我們繼續討論可能需要使用 xargs 的場景。

處理大量檔案

xargs 有用的最常見場景之一是當您需要處理大量檔案時。例如,假設您有一個包含數千個檔案的目錄,並且您想將它們複製到另一個目錄。使用傳統的 cp 命令,您必須單獨指定每個檔案,這既費時又容易出錯。

使用 xargs,您可以簡單地將檔案列表傳遞給 cp 命令,xargs 會將列表拆分為可管理的塊並將它們傳遞給 cp 命令。這是一個示例 -

find . -type f -print0 | xargs -0 cp -t /path/to/destination

在此示例中,我們使用 find 命令查詢當前目錄及其子目錄中的所有檔案。-print0 選項確保輸出以空字元分隔,這在使用 xargs 時是必要的。然後我們將輸出透過管道傳遞給 xargs,xargs 使用 -0 選項將檔案列表傳遞給 cp 命令以處理以空字元分隔的輸入。-t 選項指定目標目錄。

在多個檔案上執行命令

xargs 有用的另一種場景是當您需要在多個檔案上執行命令時。例如,假設您有一個包含多個日誌檔案的目錄,並且您想使用 gzip 命令壓縮它們。同樣,您可以使用傳統方法並單獨指定每個檔案,但這可能很乏味且容易出錯。

使用 xargs,您可以簡單地將檔案列表傳遞給 gzip 命令,xargs 將在每個檔案上執行該命令。這是一個示例 -

find . -type f -name '*.log' -print0 | xargs -0 gzip

在此示例中,我們使用 find 命令查詢當前目錄及其子目錄中所有副檔名為 .log 的檔案。然後我們將輸出透過管道傳遞給 xargs,xargs 將檔案列表傳遞給 gzip 命令。-0 選項用於處理以空字元分隔的輸入。

刪除檔案

刪除檔案是 xargs 有用的另一種場景。假設您有一個目錄包含大量您不再需要的檔案,並且您想將它們全部刪除。您可以使用 rm 命令並單獨指定每個檔案,但這可能很乏味且費時。

使用 xargs,您可以將檔案列表傳遞給 rm 命令,xargs 將刪除每個檔案。這是一個示例 -

find . -type f -name '*.txt' -print0 | xargs -0 rm

在此示例中,我們使用 find 命令查詢當前目錄及其子目錄中所有副檔名為 .txt 的檔案。然後我們將輸出透過管道傳遞給 xargs,xargs 將檔案列表傳遞給 rm 命令。-0 選項用於處理以空字元分隔的輸入。

在多個目錄上執行命令

除了檔案之外,xargs 還可以用於在多個目錄上執行命令。例如,假設您有一個包含多個子目錄的目錄,並且您想使用 ls 命令列出每個子目錄的內容。

使用 xargs,您可以將目錄列表傳遞給 ls 命令,xargs 將在每個目錄上執行該命令。這是一個示例 -

find . -type d -print0 | xargs -0 -I {} sh -c 'echo "Contents of {}:" && ls {}'

在此示例中,我們使用 find 命令查詢當前目錄及其子目錄中的所有目錄。然後我們將輸出透過管道傳遞給 xargs,xargs 將目錄列表傳遞給 sh 命令。-I 選項用於指定一個佔位符,xargs 應該用它正在處理的引數替換該佔位符。然後我們執行一個命令,該命令回顯目錄的名稱並使用 ls 命令列出其內容。

在其他命令的輸出上執行命令

xargs 有用的另一種場景是當您想要在另一個命令的輸出上執行命令時。例如,假設您有一個包含多個檔案的目錄,並且您想使用 grep 命令查詢包含特定單詞的所有檔案。

使用 xargs,您可以將檔案列表傳遞給 grep 命令,xargs 將在每個檔案上執行該命令。這是一個示例 -

find . -type f -print0 | xargs -0 grep -l 'word'

在此示例中,我們使用 find 命令查詢當前目錄及其子目錄中的所有檔案。然後我們將輸出透過管道傳遞給 xargs,xargs 將檔案列表傳遞給 grep 命令。-l 選項用於僅列印包含單詞“word”的檔案的名稱。

結論

Xargs 是一個強大的命令列實用程式,在處理大量檔案或目錄時可以節省大量時間和精力。在本文中,我們討論了 xargs 有用的幾個場景,包括處理大量檔案、在多個檔案上執行命令、刪除檔案、在多個目錄上執行命令以及在其他命令的輸出上執行命令。

通過了解 xargs 的工作原理以及如何使用其各種選項,您可以簡化您的命令列工作流程並在 Linux 中更高效地工作。

更新於:2023 年 3 月 23 日

164 次檢視

開啟您的 職業生涯

透過完成課程獲得認證

開始
廣告