Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/spring-boot/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Linux 在文件名和文件内容都受到限制的情况下,如何从unix shell进行搜索?_Linux_Unix_Shell - Fatal编程技术网

Linux 在文件名和文件内容都受到限制的情况下,如何从unix shell进行搜索?

Linux 在文件名和文件内容都受到限制的情况下,如何从unix shell进行搜索?,linux,unix,shell,Linux,Unix,Shell,是否可以查找并执行全文搜索?如何在文件名和文件内容都有一些限制的情况下进行搜索?查找-命名任意-打印| xargs grep任意 将“-l”选项添加到grep以仅获取文件名 find -name whatever -exec grep --with-filename you_search_for_it {} \; {}包含由find \终止find命令在某些情况下,globbing将对文件名提供足够的限制: shopt -s nullglob # Bash: prevents "No s

是否可以查找并执行全文搜索?如何在文件名和文件内容都有一些限制的情况下进行搜索?

查找-命名任意-打印| xargs grep任意

将“-l”选项添加到grep以仅获取文件名

find -name whatever -exec grep --with-filename you_search_for_it {} \;
{}
包含由
find


\
终止find命令

在某些情况下,globbing将对文件名提供足够的限制:

shopt -s nullglob    # Bash: prevents "No such file or directory" errors
grep string {.,[jm]*,{one,two}}/{[a-c],[hlz]}?{earth,mars,venus}[[:ascii:]]*atm*.dat
将搜索以下文件:

./bZmars_321atmBB111.dat
m42a/z3venus-a18atm9.dat
two/aaearth+GHIatm9876.dat

我强烈建议你把它用在任何你想做的芬迪·格雷皮类型的东西上——我每天都用它,无法想象没有它我会怎样生活!在这种情况下,它听起来像是
ack-G
可以执行您想要的操作。

如果文件名中有空格,请使用
-print0
查找并
-0
到xargs.yesp。每日样本:(提示):查找-print0 | xargs-0 grep-i string_我希望_搜索比
查找更高效-exec grep
我想它的低效之处在于创建一个大的文件列表作为中间文件。然而,在另一方面,它比“find-exec”解决方案更有效,因为它启动的grep实例更少。我不清楚在实践中哪个会更快(尽管我怀疑grep/xargs)。但是在大多数情况下,差异会很小,以至于无关紧要。Michael:除了它不会创建一个大的文件列表作为中间文件,并且会产生至少和find-exec一样多的grep进程(还没有提到的+version-exec会产生更少的进程)。谢谢,这已经有点效率了,尽管我更喜欢一种解决方案,它不涉及每次文件名匹配约束时启动一个进程;您应该指出分号是
-exec
语法的一部分,它是为了让shell解释整个命令而转义的,整个unix方法论都围绕着将不同的程序捆绑在一起。如此便宜,以至于您很难注意到与更难安装和使用的解决方案之间的任何差异——特别是考虑到问题意味着使用find是可取的。您如何判断,如果您不知道我在哪个文件系统上运行此操作,那么在Bash 4(和zsh)中,您可以使用
**
递归地匹配目录(在Bash中,您必须使用
shopt-s globstar
来启用它)。所以你可以做
grep冰棒doc/**/treat*/*[bB]*