2011-06-29 26 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

也谢谢你! –