linux shell命令之 xargs

來源:互聯網
上載者:User
1  簡介

xargs是一條Unix和類Unix作業系統的常用命令。它的作用是將參數列錶轉換成小塊分段傳遞給其他命令,以避免參數列表過長的問題。

2 特點

(1) 處理檔案/目錄名中的空格

find . -name '*~' -print0 | xargs -0 rm有一個問題,如果檔案或是目錄名含有空格,則可能會有些問題,這是因為xargs預設會按照空白自負來劃分輸入。一個簡單的解決辦法就是告訴find使用NUL(\0)來分割結果(通過向find提供-print0選項),並且告訴xargs也使用Nul來分隔輸入(-0)。

刪除備份檔案,即使含有空格:find . -name '*~' -print0 | xargs -0 rm

(2)當使用-i選項使,可以用{}代替每一個參數。

使用-i選項 ,預設使用{}代替前面傳送過來的參數。但是參數的長度有限制,所以可能需要使用-s選項,來擴大參數長度的大小

預設長度是4096

somecommand | xargs -s 50000 echo | xargs -I '{}' -s 100000 rm '{}'

使用-I選項,可以指定參數(不使用-i預設的{})

ls -l | xargs -I hahha echo hahha_123455666
total 2128_123455666
-rw-rw-r--.  1 algo algo   13420 Aug 20 14:15 all.cfg_123455666


(3)指定參數數量

如果你要執行的命令只接受1個或是2個參數,比如使用diff命令來對2個檔案進行比較,那麼xargs的-n選項就會非常有用,它可以指定一次向目標命令提供幾個參數,如果參數數量多於你制定的數量,則命令將會被重複調用,直到所有輸入都已經得到執行。注意,最後一次調用的參數有可能會少於指定的參數數量,下面讓我們來看一個簡單的例子:

echo {0..9} | xargs -n 2
0 1
2 3
4 5
6 7
8 9

(4)指定參數行數

同樣的,你也可以使用-L參數制定每次只對某幾行的輸入進行操作,比如-L 1將每次從輸入中取一行作為參數傳遞給待執行的命令,當然,你可以將1改為任意行,但1是最常用的,下面這條命令將示範如何得到每個git commit的代碼變化:

git log --format="%H %P" | xargs -L 1 git diff

(5)並行

並行休眠

$ time echo {1..5} | xargs -n 1 -P 5 sleep

real 0m5.013suser 0m0.003ssys 0m0.014s

線性休眠

$ time echo {1..5} | xargs -n 1 sleep

real 0m15.022suser 0m0.004ssys 0m0.015s

如果你對使用xargs進行並行計算感興趣,那麼你或許應該看看GNU parallel,相比較而言,xargs的優勢就是大多數系統預設都支援它,並且在BSD和OS X上也可以很容易的安裝,但是parallel則有許多非常贊的特性。

3使用舉例常見應用(1)find和xargs組合使用以對find返回的檔案清單執行某些操作。,find是個很強大的命令,它自己也有-exec和-delete這樣的參數可以用來執行命令和刪除檔案,儘管如此,如果你對find的這些選項不太瞭解,或是想不起來-exec那古怪的文法,那麼你還是可以使用更為簡單的xargs,並且xargs在效率上也更勝一籌。

本例中xargs將find產生的長串檔案清單拆散成多個子串,然後對每個子串調用rm。這樣要比如下使用find命令效率高的多。

find /path -type f -exec rm '{}' \;



參考自:http://heikezhi.com/yuanyi/things-you-didnt-know-about-xargs

“Things
you (probably) didn’t know about xargs”,作者:Cosmin
Stejerean 

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.