[英]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.