如何基于通配符匹配递归查找当前和子文件夹中的所有文件?
当前回答
通过管道找到grep通常更方便;它为您提供了用于任意通配符匹配的正则表达式的全部功能。
例如,要查找文件名中不区分大小写字符串“foo”的所有文件:
find . -print | grep -i foo
其他回答
Use
find path/to/dir -name "*.ext1" -o -name "*.ext2"
解释
第一个参数是要搜索的目录。默认情况下,find执行递归。-o代表-或。所以上面的意思是搜索这个通配符或这个。如果您只有一个模式,那么不需要-o。通配符模式周围的引号是必填的。
如果您的shell支持新的globbing选项(可以通过:shopt-s globstar启用),则可以使用:
echo **/*foo*
递归查找任何文件或文件夹。这得到了Bash 4、zsh和类似外壳的支持。
我个人已经定义了这个shell函数:
f() { find . -name "*$1*"; }
注意:以上行可以直接粘贴到shell或添加到用户的~/.bashrc文件中。
然后我可以通过键入以下内容来查找任何文件:
f some_name
或者,您可以使用具有简单语法的fd实用程序,例如fd模式。
我很惊讶地发现,当我们递归地执行时,locate并没有被大量使用。
我将首先定位“$PWD”以获取当前感兴趣文件夹中的文件列表,然后根据需要对它们运行grep。
locate "$PWD" | grep -P <pattern>
当然,这是假设updatedb已完成,索引定期更新。这是一种查找文件的方式,比运行查找并要求它从树上下来快得多。提及这一点是为了完整。如果这棵树不是很重,就不反对使用find。
Use
find <directory_path> -type f -name "<wildcard-match>"
在通配符匹配中,您可以提供希望匹配的字符串,例如*.c(对于所有c文件)。
你也可以使用ripgrep。
例子:
搜索所有包含子字符串psql的文件名,
rg --files | rg psql
推荐文章
- 在Bash中检查变量是否存在于列表中
- 查看PS命令的全部输出
- 确保一次只运行一个shell脚本实例的快速方法
- Linux命令将域名转换为IP
- 如何从命令行在windows中找到mysql数据目录
- 如何在Makefile中设置子进程的环境变量
- 如何让“wc -l”打印没有文件名的行数?
- 有效地测试Linux上的端口是否打开?
- 如何从另一个文件A中删除文件B中出现的行?
- 对以制表符分隔的文件进行排序
- Shell脚本删除超过n天的目录
- 使用sudo时未找到命令
- 当有命令行参数时,如何使用GDB分析程序的核心转储文件?
- 如何检查shell脚本中是否存在命令?
- 如何使用查找命令从列表中查找所有具有扩展名的文件?