如何使用通配符匹配递归查找当前目录及其子文件夹中的所有文件?
find
命令还有 -iname
、-regex
和 -iregex
标志,用于进行不区分大小写的通配符、正则表达式和不区分大小写的正则表达式匹配,因此无需将其输出导向 grep
。 - iobender\
)的目录上使用 find 命令,那么速度会非常慢。 - alfalfasproutfoo
的答案,但是得到了这些答案:Fooled Around
、Fool Would Say
、Fool's Overture
、Devil's Food
、Foo Fighters
、Foot In The Door
和Fooling Yourself
:) - undefinedfind
命令会查找所有符合指定模式的文件:
find . -name "*foo"
然而,如果你想要一张图片:
tree -P "*foo"
apt-get
,则可使用命令brew install tree
进行安装。 - DeBraidfind -L . -name "foo*"
在一些情况下,我需要使用-L参数来处理符号目录链接。默认情况下,符号链接会被忽略。在那些情况下,这会很令人困惑,因为我会切换到子目录,并看到与模式匹配的文件,但是find不会返回文件名。使用-L可以解决这个问题。find命令的符号链接选项包括-P、-L和-H。使用
find <directory_path> -type f -name "<wildcard-match>"
在通配符匹配中,您可以提供要匹配的字符串,例如 *.c(用于所有 C 文件)。
find
检测符号文件链接(但不检测符号目录链接)。-type f
会导致 find
不检测符号文件链接。如果您还想包括指向文件的符号链接,请使用 -L
:find -L <可选目录路径> -type f
。不要使用 -type f,l
,因为它还会包括符号目录链接。 - M Imam Pratama如果你的shell支持一种新的globbing选项(可以通过shopt -s globstar
启用),你可以使用:
echo **/*foo*
要递归查找文件或文件夹,此功能在Bash 4、zsh和类似的shell中都支持。
个人定义了以下shell函数:
f() { find . -name "*$1*"; }
注意:可以将上面的行直接粘贴到shell中或添加到用户的~/.bashrc
文件中。
然后我可以通过键入以下命令来查找任何文件:
f some_name
或者你可以使用一个带有简单语法的 fd
实用工具,例如 fd pattern
。
bash-3.2$ shopt -s globstar
gives
bash: shopt: globstar: invalid shell option name
- drewish使用
find path/to/dir -name "*.ext1" -o -name "*.ext2"
解释
find
进行递归搜索。-o
表示 -or
。所以上面的意思是搜索此通配符或这个通配符。如果您只有一个模式,则不需要使用 -o
。默认递归搜索文件的方法,在大多数情况下都可用,是
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 --help
或man locate
此外,您可以通过cron作业配置locate在预定时间更新其数据库,因此一个每天凌晨1点更新数据库的示例cron如下:
0 1 * * * updatedb
这些cron作业需要由root配置,因为updatedb需要root特权才能遍历整个文件系统。
您可以使用:
find . -type f -name 'text_for_search'
如果你想使用正则表达式,请使用-iname
:
find . -type f -iname 'text_for_search'
find . foo*
,则“foo”将被展开,然后传递给find命令。 - grinch" "
是非常必要的。 - WesternGunfind . -name "foo*" 2>/dev/null
。 - Jobbo