Linux find file names with given string
我在Ubuntu上,我想查找当前目录和子目录中的所有文件,它们的名称包含字符串"john"。我知道grep可以匹配文件中的内容,但我不知道如何将其与文件名一起使用。任何帮助都将不胜感激。
- 基于通配符匹配,我如何递归查找当前和子文件夹中的所有文件?
使用find命令,
1
| find . -type f -name"*John*" |
- 使用#!/bin/bash if [ -z $1 ]; then echo"Error: Specify pattern for search"; else /usr/bin/find . -type f -name"*$1*"; fi 创建自定义bash脚本只需运行F search-string作为一个完美的快捷方式。
- @伊莉亚罗斯托夫-很好,但埃多克斯1〔2〕会好一点。
- @乔啊,对。你的意思是如果一条路径有空格?但在这里,我们只检查$1空间的存在是否会使$2出现,就这样。你是说理论上比较好,对吧?
- @伊莉亚罗斯托夫——事实上,我错了。如果$1为空,则测试变为if [ -z ]。我以为这是语法错误,但它起作用了。从现在起我可以简化一些代码。
已经提供了一个正确的答案,但是为了让你学会如何帮助自己,我想我会以不同的方式提供一些有用的东西;如果你能用一个词总结出你想要实现的目标,那么Linux上有一个强大的、很好的帮助功能。
1
| man -k <your search term> |
它的作用是在简短描述中列出所有包含搜索项的命令。通常你很有可能找到你想要的。;)
这种输出有时可能有些压倒性,我建议将其缩小到可执行文件,而不是所有可用的手册页,比如:
1
| man -k find | egrep '\(1\)' |
或者,如果您还希望查找需要更高权限级别的命令,例如:
1
| man -k find | egrep '\([18]\)' |
- 我很好奇…如果一个问题没有试图通过搜索来解决手头的问题,它会得到一个赞成票,一个友好的解释就是如何找出可能的命令。标准是什么?:)
- 我支持你。教训是很少有人能做到的。但我们可以看到样本并加以调整:)
find命令需要很长时间,因为它扫描文件系统中的真实文件。
最快的方法是使用locate命令,这将立即产生结果:
如果找不到命令,需要先安装mlocate包,运行updatedb命令,第一次准备搜索数据库。
更多详情请访问:https://medium.com/@thucc/the-fastest-way-to-find-files-by-filename-mlocate-locate-commands-55bf40b297ab
这是一个非常简单的解决方案,使用您要搜索的目录中的tree命令。-f显示完整的文件路径,|用于将树的输出通过管道传输到grep以查找名称中包含字符串filename的文件。
使用简单的ack。只需键入ack
- 这似乎还包括包含搜索文本的所有路径,而不仅仅是文件:stackoverflow.com/questions/7698867/&hellip;