2013-09-23 111 views
1

ls只是打印目錄中的文件,並且wc -l統計特定文件名的行號,xargs會將ls輸出一個一個地發送到wc -l,但最終的結果是總計,爲什麼?哪個命令在命令中添加總數ls | xargs wc -l?

輸出樣本:

14 doc.txt 
230 legion.c 
519 legion_agent.c 
    70 legion_manager.c 
    52 legion_privilege.c 
236 logic_agent.c 
349 protocol.c 
1470 total 

回答

4

wc組合了傳遞給是作爲參數的所有文件的總線。 xargs收集來自輸入的行,並將它們全部作爲一組多個參數集合到wc中,以便獲得所有這些文件的總數。

就好像我有文件ab一個例子,我跑:

wc -l a b 

我會得到

28 a 
17 b 
45 total 

同樣,如果模仿的ls的輸出與(echo a; echo b;)xargs我們」加入d得到相同的輸出:

(echo a; echo b;) | xargs wc -l 

輸出:

28 a 
17 b 
45 total 

如果再加上呼應:

(echo a; echo b;) | xargs echo wc -l 

輸出:

wc -l a b 
+2

'xargs'也分割文件nam的列表e參數,如果它超過了'ARG_MAX',在這種情況下,您將獲得多個'wc'調用並因此獲得多個(子)'total'行。 – tripleee

+0

@tripleee感謝您的補充 – spin6lock

+1

感謝@ konsolebox,我誤解了xargs的工作模式。我認爲xargs在ls的每一行輸出上觸發'wc -l'。當只有一個參數供應時'wc -l'沒有提供總線。 – spin6lock

0

試試這條線,看它是否給了你想要的東西:

grep -c '.*' *.*