所以之前可能会问过这个问题,但经过几个小时的搜索(或错误搜索),我决定问这个问题。 如果之前已经回答过,请将问题与我联系并关闭。
这是我的问题。
我的文件系统上有一个文件夹,即"文件"。这个文件夹有很多子文件夹及其子文件夹。在某些级别深层,它们都有一个在所有文件夹中都被称为相同的文件。在该文件中,其中包含大量文本,但并非完全相同。我需要一个包含某个字符串的文件列表。
我知道我可以用
做到这一点find ./ -type f -exec grep -H 'text-to-find-here' {} \;
但主要问题是:它将克服该文件系统上的每个文件。由于文件系统包含数百万个文件,这将花费很长时间,特别是当我知道这段文本应该存在的确切文件时。
在视觉上它看起来像这样:
foobar/foo/bar/file.txt
foobar/foobar/bar/file.txt
foobar/barfoo/bar/file.txt
foobar/raboof/bar/file.txt
foobar/oof/bar/file.txt
我需要file.txt中的特定字符串(如果该字符串存在..) (是的:/ bar /中的文件是ALLWAYS,称为file.txt ...)
任何人都可以帮我解决这个问题吗?我在#34; easy"解决方案:o
日Thnx, 丹尼尔
答案 0 :(得分:1)
使用-name
选项按名称进行过滤:
find . -type f -name file.txt -exec grep -H 'text-to-find-here' {} +
如果它始终位于名为bar
的目录中,则可以将-path
与通配符一起使用:
find . -type f -path '*/bar/file.txt' -exec grep -H 'text-to-find-here' {} +
答案 1 :(得分:0)
使用单个GNU grep 命令:
grep -rl 'pattern' --include=*file.txt
<强>
--include=glob
强>使用通配符
仅搜索名称与glob匹配的文件