xargs

xargs 指令的作用是可以將參數切成分段,並傳遞其他命令,避免參數過長的問題。
xargs 的運作是使用標準輸入(Standard Input)讀取資料,以空白字元(空格、Tab)或換行當作分格,

基本用法

# 利用 -n 參數決定一行輸出幾個 Item
echo a b c d e f| xargs -n 3

# grep 出目前目錄底下所有 PHP 檔案有使用到 SongAll Model 的檔案
find . -name "*.php" | xargs grep SongAll

# 用 find 找出 *.garbage 系列的檔案並刪除
find . -name "*.garbage" | xargs rm
# 為了避免換行字元造成 xargs 誤判成多個檔案,因此只使用 -print0 將換行改成用 ASCII 的 NULL('\0')字元取代
# xargs 也要使用 -0 參數將判斷改成 '\0'
find . -name "*.garbage" -print0 | xargs -0 rm

# 利用 -I 參數將輸出的結果暫存進變數,以供後續指令使用
# 以 song.list 每行資料的為檔名,建立出一系列 {song_id}.song_id 的檔案
# 冷知識:變數名稱傳統上都用 %,原因是現下許多系統的 command 或者程式語言的 printf 系列語法輸出的 prefix 都是 % 開頭
cat song.list | xargs -I % touch %.song_id

# 利用 -S 參數調整參數的最大長度
cat file.list | xargs -S 1024 -I % php newFile.php %

# 利用 -P 參數選擇執行的 process 數量
# 請謹慎使用
cat song.list | xargs -P 5 -I % php deleteSong.php %

Categories: Unix