繁体   English   中英

为什么 xargs -L 产生正确的格式,而 xargs -n 没有?

[英]Why does xargs -L yield the right format, while xargs -n doesn't?

考虑以下:

$ 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。 谢谢。

-L按行分割; echo不会按行而是按空格分隔其 output,因此运行单个ls -l并将所有列格式化为一个组。

-n按参数拆分; 在没有-L-0的情况下,分隔符是空格(可能通过引用修改),因此每个文件名都有自己的ls -l运行,并且独立运行无法协调列宽。

POSIX 标准要求

-L

该实用程序应针对来自标准输入的 arguments 的每个非空number执行。 如果剩余的行数少于 arguments,则最后一次调用实用程序应使用更少的行数。 除非该行的最后一个字符是<blank> ,否则该被认为以第一个字符结尾; 尾随<blank>表示继续到下一个非空行,包括在内。

-n数字

使用尽可能多的标准输入arguments调用实用程序,最多可达数字(正十进制整数) arguments 最大值。

(添加了重点。)由于echo *产生一行, xargs -L 1只是一次将所有文件名提供给ls ,然后ls才能很好地对齐列。

(换句话说,您的第一个命令等效于ls -l index.html* ,只是它不能正确处理包含空格的文件名。)

-L如何按行拆分和-n如何按空格拆分的最小可运行示例

这应该澄清geekosaur 进一步所说的

printf '1 2\n3 4\n' | xargs -L1 echo

按行拆分,因此等效于:

echo 1 2
echo 3 4

输出:

1 2
3 4

然而:

printf '1 2\n3 4\n' | xargs -n1 echo

在任何空白处拆分,因此等效于:

echo 1
echo 2
echo 3
echo 4

而是产生:

1
2
3
4

可移植性

https://unix.stackexchange.com/questions/448290/are-l1-and-n-1-the-same-for-xargs/448379#448379 -L的便携性稍差一些,因为它是 XSI POSIX扩展名,而-n不是。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM