shell - "grep"是否有它可以处理的最大文件数?

标签 shell unix command-line grep cat

我刚跑:

grep ""  *.txt > out.txt 

1500 个文件。输出只包括几百个文件..为什么?

使用时:
cat  *.txt > out.txt 

这有效,但我希望文件名作为行名。

谢谢!

最佳答案

你确定所有的文件真的出现在 cat *.txt > out 中吗? ?除非您正好处于每个命令的最大字符数的边缘,否则应该没有区别。尝试这个:

ls -1 | egrep '\.txt$' | xargs egrep "" /dev/null > out
ls -1列出目录中的所有文件,每行一个文件名,第一个 egrep只过滤掉以“.txt”结尾的那些。这样,您就不必担心在列出文件时用完命令行长度。 xargs阅读 stdin , 直到它在 xargs 的其他参数之后在单个命令行中获得尽可能多的行.然后它调用您提供的命令以及您为该组输入参数提供的选项。 xargs然后重复该过程,直到用完您提供的所有参数。每次调用最后egrep写入相同的 stdout ,所以所有的输出都到同一个文件中。
/dev/null有没有情况xargs只找到一行输入(例如,因为你只有一个文件,或者在打包文件时,最后一个包只有一个文件)。如果您调用 egrep对于单个文件,它不会打印文件名。既然你特别说你想要文件名,告诉 egrep搜索 /dev/null保证总是至少有两个文件。自 /dev/null保证为空,您将永远不会在其中找到任何内容,也不会出现在您的输出中。
xargsfind 配合使用效果很好.如果要在当前目录及其子目录的所有“.txt”文件中搜索“foo”:
find . -name "*.txt" -print | xargs egrep foo /dev/null

会做的伎俩。如果您的文件名中带有空格,它们将不会被引用并且 egrep会感到困惑,所以使用 -print0 find 上的选项和 -0 xargs 上的选项:
find . -name "*.txt" -print0 | xargs -0 egrep foo /dev/null

关于shell - "grep"是否有它可以处理的最大文件数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19848938/

相关文章:

xml - 如何使用 xmlstarlet 在另一个元素下插入一个新元素?

c - C 中的字数统计程序计数不正确

java - 从java在远程linux中运行命令

perl - 如何检查哪种检查端口状态的方法更有效?

sockets - 为什么在 SIGQUIT 期间无法写入子进程的套接字?

unix - 如何删除文件夹中除最后三个文件以外的所有文件

浏览器外的 Javascript

Linux 相当于 OS X 的/usr/bin/open

shell - zsh 运行存储在变量中的命令?

linux - 将文件夹中的所有文件重命名为编号列表 1.jpg 2.jpg