locate -i nohup.out | xargs -d '\n' -L1 -p rm
locate 输出中的每一行都被 xargs 视为参数,那么 和 是-L1
相同-n 1
的吗?
答案1
从手册中:
-L max-lines
每个命令行最多使用 max-lines 非空白输入行。尾随空白导致输入行在逻辑上继续到下一个输入行。意味着-x。-n max-args
每个命令行最多使用 max-args 个参数。如果超出大小(请参阅 -s 选项),则将使用少于 max-args 的参数,除非给出 -x 选项,在这种情况下 xargs 将退出。-d delim
输入项以指定字符终止。 [...]
基于此和我的理解,在您的情况下,-L1
通过传递的参数和参数将分隔符从空格更改为(换行符)来-n1
使 和 等效1
\n
-d
例如,如果没有-d
参数,如果您的定位输出中有一个空格,那么这一行将被分成两个参数,因此 rm with 的 2 种不同用法-n1
,而它仍然被视为一个参数和只有一个命令和-L1
答案2
根据阅读手册,差异似乎在于-L
过滤器非空白线,而-n
没有。假设locate
永远不会输出仅包含空格的行,因此在此用例中它们在功能上应该是相同的。
答案3
-n
在任何空格上分割,-L
在换行符上分割
因此,它们会产生不同的结果:
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
答案4
选项 -L 是 XSI 扩展,不需要出现在嵌入式系统上。
-n 选项是基本标准的一部分并且始终有效。
请参阅标准作为参考:http://pubs.opengroup.org/onlinepubs/9699919799/utilities/xargs.html
请注意,某些实现还可能会切换以空格结尾的行的行为,而其他实现可能会连接以空格结尾的行,无论是否指定了 -L 选项。