2011-06-29 28 views
5

考慮以下幾點:爲什麼xargs -L會產生正確的格式,而xargs -n不會呢?

$ echo index.html* | xargs -L 1 ls -l 
-rw-r--r-- 1 zeki zeki 17198 2011-05-03 23:18 index.html 
-rw-r--r-- 1 zeki zeki 17198 2011-05-03 23:20 index.html.1 
-rw-r--r-- 1 zeki zeki 17198 2011-05-03 23:21 index.html.2 
-rw-r--r-- 1 zeki zeki 146589 2011-05-05 12:29 index.html.3 
$ echo index.html* | xargs -n 1 ls -l 
-rw-r--r-- 1 zeki zeki 17198 2011-05-03 23:18 index.html 
-rw-r--r-- 1 zeki zeki 17198 2011-05-03 23:20 index.html.1 
-rw-r--r-- 1 zeki zeki 17198 2011-05-03 23:21 index.html.2 
-rw-r--r-- 1 zeki zeki 146589 2011-05-05 12:29 index.html.3 

爲什麼-n選項產生不正確的格式?以防萬一,我在Ubuntu下使用bash。謝謝。

回答

12

-L按行分割; echo不會按行分隔輸出,而是按空格分隔,因此只運行一個ls -l,並將所有列格式化爲一組。

-n按參數分割;在-L-0不存在的情況下,分隔符是空格(可能通過引用進行修改),因此每個文件名都會自行運行,並且獨立運行無法協調列寬。

+0

打我吧,+1。 –

+0

謝謝!現在很明顯。 –

3

POSIX標準mandates

-L

該實用程序應爲每個非空number管線的來自標準輸入參數被執行。如果少於剩餘的數字,則實用程序的最後一次調用應少用參數行。 A line被認爲以第一個結尾,除非該行的最後一個字符是<blank>;尾隨<blank>表示延續到下一個非空行,包括端點在內。

-n

使用盡可能多的標準輸入參數越好,高達(正十進制整數)參數最大調用實用程序。

(着重)。由於echo *產生單個線,xargs -L 1只是饋送所有的文件名,以ls的一次,並且只有這樣,才能很好地ls對齊列。

(換句話說,你的第一個命令是等效ls -l index.html*,但它不能正確處理包含空格的文件名)。

+0

也謝謝你! –