如何基于通配符匹配递归查找当前和子文件夹中的所有文件?
当前回答
如果您的shell支持新的globbing选项(可以通过:shopt-s globstar启用),则可以使用:
echo **/*foo*
递归查找任何文件或文件夹。这得到了Bash 4、zsh和类似外壳的支持。
我个人已经定义了这个shell函数:
f() { find . -name "*$1*"; }
注意:以上行可以直接粘贴到shell或添加到用户的~/.bashrc文件中。
然后我可以通过键入以下内容来查找任何文件:
f some_name
或者,您可以使用具有简单语法的fd实用程序,例如fd模式。
其他回答
fd
如果查找速度太慢,请尝试fd实用程序,这是一个简单而快速的替代方法,可以在Rust中查找。
语法:
fd PATTERN
演示:
主页:https://github.com/sharkdp/fd
find将查找与模式匹配的所有文件:
find . -name "*foo"
但是,如果您需要图片:
tree -P "*foo"
用于文件搜索
查找/-xdev-name settings.xml→ 整个计算机查找。/-xdev-名称设置.xml→ 当前目录及其子目录
对于具有扩展名类型的文件:
find . -type f -name "*.iso"
递归搜索文件的默认方法,在大多数情况下可用的方法是
find . -name "filepattern"
它开始从您所在的当前目录中递归遍历文件名或模式。使用find命令,可以使用通配符和各种开关。要查看选项的完整列表,请键入
man find
或者如果系统中没有手册页:
find --help
然而,还有比find更现代、更快的工具,它们可以遍历整个文件系统并为文件编制索引。一种常见的工具是locate或slocate/mlocate。您应该查看操作系统的手册,了解如何安装它,一旦安装完成,就需要启动数据库。如果安装脚本不适合您,可以通过键入
sudo updatedb
并且,要使用它查找某些特定文件,请键入:
locate filename
或者,要在当前目录中查找文件名或模式,可以键入:
pwd | xargs -n 1 -I {} locate "filepattern"
它将查看其文件数据库,并快速打印出与您键入的模式匹配的路径名。要查看查找选项的完整列表,请键入:locate--帮助或手动定位
此外,您可以将locate配置为通过cron作业在计划时间更新其数据库,因此在凌晨1点更新数据库的示例cron如下所示:
0 1 * * * updatedb
这些cron作业需要由root配置,因为updatedb需要root权限才能遍历整个文件系统。
您可以使用:
find . -type f -name 'text_for_search'
如果要使用正则表达式,请使用-iname:
find . -type f -iname 'text_for_search'
推荐文章
- 如何将文件指针(file * fp)转换为文件描述符(int fd)?
- Linux Bash中双&和分号有什么区别?
- 如何合并2 JSON对象从2个文件使用jq?
- 在SSH会话中查找客户端的IP地址
- C++ Linux的想法?
- 如何为Fedora安装g++ ?
- Linux删除大小为0的文件
- Spring引导应用程序作为服务
- 如何重定向标准derr和标准输出到不同的文件在同一行脚本?
- Windows和Linux上的c++编译:ifdef开关
- Linux: kill后台任务
- 如何修改Linux系统中打开文件的数量限制?
- 删除Bash脚本中的重复条目
- 如何将Bash命令的输出分配给变量?
- errno线程安全吗?