首頁 > 環境與工具程式 > xargs

xargs:從標準輸入建構及執行命令列

xargs 命令會從標準輸入 (stdin) 讀取項目,並將這些項目建構成其他命令的引數列表來執行。這對於自動化複雜任務非常有用,例如將透過管道 (|) 傳遞的多行輸入轉換為單一命令的引數,或限制一次處理的引數數量。

概述

xargs 從標準輸入讀取資料,將其解釋為以空白或換行符分隔的引數,然後將這些引數傳遞給指定的命令來執行。它與 find 命令結合使用時特別強大,常用於對檔案列表執行批次處理。

主要功能

  • 將標準輸入資料轉換為命令引數
  • 限制命令執行時的引數數量
  • 支援並行處理
  • 安全處理包含特殊字元的檔案名稱

主要選項

xargs 命令的主要選項用於設定輸入處理方式、命令執行控制以及輸出格式等。

輸入處理

執行控制

生成的命令:

請試著組合命令。

這個 Django 應用程序是一個技術指南文檔,旨在為用戶輕鬆解釋 Linux 的各種命令。

`xargs` 執行命令。

請將上述選項組合在一起,與 AI 一同虛擬執行命令。

使用範例

xargs 可在各種情境下靈活運用。以下是一些常見的使用範例。

基本用法:刪除多個檔案

echo "file1.txt file2.txt" | xargs rm

將從標準輸入接收到的檔案名稱作為引數傳遞給 rm 命令來刪除。

與 find 一起安全刪除檔案

find . -name "*.bak" -print0 | xargs -0 rm

使用 find -print0 和 xargs -0,即使檔案名稱包含空白或特殊字元也能安全地刪除檔案。

對每個檔案執行命令 (取代字串)

find . -name "*.log" | xargs -I {} mv {} {}.old

對 find 找到的每個 .log 檔案執行 mv 命令,將副檔名變更為 .old。

並行連接多個主機的 SSH

cat hostnames.txt | xargs -P 5 -I {} ssh {} "uptime"

對 hostnames.txt 文件中的每個主機同時嘗試 5 個 SSH 連接,以檢查其 uptime。

執行前確認提示

ls *.tmp | xargs -p rm

在刪除目前目錄中的所有 .tmp 檔案之前,對每個檔案詢問是否刪除。

提示與注意事項

有效使用 xargs 的提示和需要注意的事項。

安全處理檔案名稱

由於檔案名稱可能包含空白、Tab、換行符、引號等特殊字元,因此與 find 命令一起使用時,務必使用 `find ... -print0 | xargs -0 ...` 的組合。這會以空字元分隔項目,從而防止這些問題。

  • 始終同時使用 `find -print0` 和 `xargs -0`
  • 預設以空白分隔,如果檔案名稱包含空白則可能出現問題

執行危險命令時的注意事項

與 rm、mv、chown 等會修改系統的命令一起使用 xargs 時,必須非常謹慎。建議使用 `-p` 選項在每次執行前確認,或使用 `-t` 選項預先查看將要執行的命令。

  • 使用 `-p` (prompt) 選項在執行前確認
  • 使用 `-t` (trace) 選項查看將要執行的命令
  • 先使用 `echo` 等命令進行測試,確認其行為是否符合預期

xargs 與 for 迴圈比較

對於簡單的任務,Shell 的 for 迴圈可能更直觀。但是,當需要處理大量檔案/項目、需要並行處理,或處理的項目超過命令列長度限制時,xargs 是更有效率且強大的替代方案。

  • 處理大量檔案:`xargs` 記憶體效率更高
  • 並行處理:`xargs -P`
  • 命令列長度限制:`xargs` 會自動分割處理

相同類別命令