当与xargs一起使用时,ls不支持grep和ls:'l'标志?

时间:2012-11-22 13:57:47

标签: linux unix grep ls xargs

为什么 ls 在与xargs和grep组合传递-l标志时不起作用?

$ ls -rt | xargs grep xyz

有效,但是:

$ ls -lrt | xargs grep xyz
grep: invalid option -- '-'
Usage: grep [OPTION]... PATTERN [FILE]...
Try `grep --help' for more information.

2 个答案:

答案 0 :(得分:3)

因为ls -l的输出与此类似:

-rw-r--r-- 1 root  root  1491872 2012-11-22 03:07 Xvfb_screen0

将此管道设置为xargs(ls -l | xargs grep xyz)会使您的grep命令为

grep xyz -rw-r--r-- 1 root  root  1491872 2012-11-22 03:07 Xvfb_screen0

它没有任何意义。

修改

在这里回答@vladr评论,因为它的格式比评论框更好。每个空格分隔的文本与xargs的输入作为新参数传递给执行的命令,如您所见:

$ ls -l 
total 4
-rwxrwxr-x 1 carlos carlos 18 2012-11-22 15:17 foo

$ cat foo
#!/bin/sh
echo $#

$ ls -l | xargs ./foo
10

通过将xargs中的分隔符设置为\n,可以按照您的说法行事:

$ ls -l | xargs -d '\n' ./foo
2

答案 1 :(得分:2)

要回答您的问题,具体,请使用ls -lrt | xargs grep xyz --(请注意--,这表示之后出现的任何破折号-都应按字面意思理解,而不是选项标记 - 请参阅@CarlosCampderrós's answer以了解您的命令扩展到的内容,但我强烈怀疑您的设置是否正确,因为不太可能实现任何有用的东西,如使用

更有可能您正试图在所有文件中以反向时间顺序grep xyz。如果是,请使用ls -1rt | xargs grep xyz --(注意破折号-1破折号-l。)--在这种情况下是真正可选的(除非您希望一个或多个文件的名称以短划线-开头。)