如何基于通配符匹配递归查找当前和子文件夹中的所有文件?
当前回答
Use
find <directory_path> -type f -name "<wildcard-match>"
在通配符匹配中,您可以提供希望匹配的字符串,例如*.c(对于所有c文件)。
其他回答
用于文件搜索
查找/-xdev-name settings.xml→ 整个计算机查找。/-xdev-名称设置.xml→ 当前目录及其子目录
对于具有扩展名类型的文件:
find . -type f -name "*.iso"
Use
find <directory_path> -type f -name "<wildcard-match>"
在通配符匹配中,您可以提供希望匹配的字符串,例如*.c(对于所有c文件)。
递归搜索文件的默认方法,在大多数情况下可用的方法是
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权限才能遍历整个文件系统。
如果已安装,请尝试使用fd命令。安装说明。
查找以“name”开头的所有文件:
fd "name*"
此命令忽略所有.hhidden和.gitignoreed文件。
要包含.gitignoreed文件,请添加-I选项,如下所示:
fd -I "name*"
要包含隐藏文件,请添加-H选项,如下所示:
fd -H "name*"
通过管道找到grep通常更方便;它为您提供了用于任意通配符匹配的正则表达式的全部功能。
例如,要查找文件名中不区分大小写字符串“foo”的所有文件:
find . -print | grep -i foo
推荐文章
- 如何从查找“类型d”中排除此/ current / dot文件夹
- 在tmux中保持窗口名称固定
- 只使用md5sum获取哈希值(没有文件名)
- 如何生成一个核心转储在Linux上的分段错误?
- 在Python中如何在Linux和Windows中使用“/”(目录分隔符)?
- 使用sh shell比较字符串
- 在Bash中测试非零长度字符串:[-n "$var"]或["$var"]
- 如何创建Bash别名?
- 如何设置ssh超时时间?
- 将所有变量从一个shell脚本传递到另一个?
- 只列出UNIX中的目录
- 如何在Apache服务器上自动将HTTP重定向到HTTPS ?
- 如何删除shell脚本中文件名的扩展名?
- 如何限制从grep返回的结果的数量?
- 'find -exec'是Linux中的shell函数