tux*_*21b 2477
使用find:
find . -name "foo*"
Run Code Online (Sandbox Code Playgroud)
find需要一个起点,.(点)指向当前目录.
Pau*_*ipp 205
管道找到grep往往更方便; 它为您提供了任意通配符匹配的正则表达式的全部功能.
例如,要在文件名中查找具有不区分大小写的字符串"foo"的所有文件:
~$ find . -print | grep -i foo
Run Code Online (Sandbox Code Playgroud)
Isl*_*Cow 137
find 将找到与模式匹配的所有文件:
find . -name "*foo"
Run Code Online (Sandbox Code Playgroud)
但是,如果你想要一张照片:
tree -P "*foo"
Run Code Online (Sandbox Code Playgroud)
希望这可以帮助!
tod*_*car 30
find -L . -name "foo*"
Run Code Online (Sandbox Code Playgroud)
在少数情况下,我需要-L参数来处理符号目录链接.默认情况下,将忽略符号链接.在那些情况下,它很混乱,因为我将目录更改为子目录并查看匹配模式的文件但查找不会返回文件名.使用-L解决了这个问题.find的符号链接选项是-P -L -H
ken*_*orb 26
如果您的shell支持新的globbing选项(可以通过以下方式启用shopt -s globstar),您可以使用:
echo **/*foo*
Run Code Online (Sandbox Code Playgroud)
以递归方式查找任何文件或文件夹.这由Bash 4,zsh和类似的shell支持.
就个人而言,我已经定义了这个shell函数:
f() { find . -name "*$1*"; }
Run Code Online (Sandbox Code Playgroud)
注意:上面的行可以直接粘贴到shell或添加到用户的~/.bashrc文件中.
然后我可以通过键入来查找任何文件:
f some_name
Run Code Online (Sandbox Code Playgroud)
或者,您可以使用具有简单语法的fd实用程序,例如fd pattern.
XYZ*_*nux 25
find <directory_path> -type f -name "<wildcard-match>"
Run Code Online (Sandbox Code Playgroud)
在通配符匹配中,您可以提供您希望匹配的字符串,例如*.c(对于所有c文件)
ken*_*orb 21
fd如果find太慢,请尝试fd实用程序 - find用Rust编写的简单快速的替代方法.
句法:
fd PATTERN
Run Code Online (Sandbox Code Playgroud)
演示:
主页:https://github.com/sharkdp/fd
小智 10
您可以使用:
# find . -type f -name 'text_for_search'
Run Code Online (Sandbox Code Playgroud)
如果你想使用REGX使用 -iname
# find . -type f -iname 'text_for_search'
Run Code Online (Sandbox Code Playgroud)
Jay*_*ang 10
这将搜索当前目录和子目录中的所有相关文件,分别计算它们的行数以及总计:
find . -name "*.wanted" | xargs wc -l
Run Code Online (Sandbox Code Playgroud)
Shi*_*hah 10
用
find path/to/dir -name "*.ext1" -o -name "*.ext2"
Run Code Online (Sandbox Code Playgroud)
解释
find递归。-o代表-or。所以上面的意思是搜索这个通配符或这个。如果您只有一种模式,则不需要-o.我很惊讶地发现当我们要递归时,locate 并没有被大量使用。
我会首先定位“$PWD”以获取当前感兴趣文件夹中的文件列表,然后根据需要对它们运行 grep。
locate "$PWD" | grep -P <pattern>
Run Code Online (Sandbox Code Playgroud)
当然,这是假设updatedb 已经完成并且索引会定期更新。与运行查找并要求它沿着树向下查找相比,这种查找文件的方式要快得多。提到这一点是为了完整性。如果树不是很重,则不反对使用 find。
如果已安装,请尝试使用该fd命令。安装说明。
查找所有以“name”开头的文件:
fd "name*"
Run Code Online (Sandbox Code Playgroud)
此命令忽略 all.hidden和.gitignoreed 文件。
要包含.gitignoreed 文件,请添加-I以下选项:
fd -I "name*"
Run Code Online (Sandbox Code Playgroud)
要包含隐藏文件,请添加-H如下选项:
fd -H "name*"
Run Code Online (Sandbox Code Playgroud)
搜索递归文件的默认方法,在大多数情况下可用
find . -name "filepattern"
Run Code Online (Sandbox Code Playgroud)
它从您所在的当前目录中开始文件名或模式的递归遍历。使用find命令,您可以使用通配符和各种开关来查看选项的完整列表,键入
man find
Run Code Online (Sandbox Code Playgroud)
或者您的系统上没有手册页
find --help
Run Code Online (Sandbox Code Playgroud)
但是,还有更多更现代,更快捷的工具可以遍历整个文件系统并为文件建立索引,其中一种常见工具是定位或定位/定位,您应该查看操作系统手册以了解如何安装它,安装后需要启动数据库,如果安装脚本不帮您完成,可以通过键入以下内容手动完成
sudo updatedb
Run Code Online (Sandbox Code Playgroud)
并且,使用它来查找某些特定的文件类型
locate filename
Run Code Online (Sandbox Code Playgroud)
或者,要从当前目录中查找文件名或模式,可以键入:
pwd | xargs -n 1 -I {} locate "filepattern"
Run Code Online (Sandbox Code Playgroud)
它将浏览其文件数据库,并快速打印出与您键入的模式匹配的路径名。要查看定位选项的完整列表,请输入:
locate --help或man locate
另外,您可以配置locate通过cron作业按计划的时间更新它的数据库,因此示例cron在1AM更新数据库的示例如下所示:
0 1 * * * updatedb
Run Code Online (Sandbox Code Playgroud)
这些cron作业需要由root配置,因为updatedb需要root特权才能遍历整个文件系统。
下面的命令有助于搜索任何文件
1)
不考虑情况2) 结果 未经许可排除文件夹
3) 从根目录或您喜欢的路径搜索。更改 / 使用您喜欢的路径。
语法:
find -iname '' 2>&1 | grep -v "权限被拒绝"
示例
find / -iname 'C*.xml' 2>&1 | grep -v "权限被拒绝"
find / -iname '*C*.xml' 2>&1 | grep -v "Permission denied"
Run Code Online (Sandbox Code Playgroud)
用于文件搜索
find / -xdev -name settings.xml ->整个计算机
find ./ -xdev -name settings.xml ->当前目录及其子目录,
用于扩展名类型的文件
find . -type f -name "*.iso"
Run Code Online (Sandbox Code Playgroud)
如果要使用通配符搜索特殊文件,可以使用以下代码:
find . -type f -name "*.conf"
Run Code Online (Sandbox Code Playgroud)
假设你想从这里搜索每个 .conf 文件:
.表示从这里开始搜索(当前位置)
-type表示这里是文件(f)的搜索项的类型。
-name意味着您要搜索具有*.conf名称的文件。
Following command will list down all the files having exact name "pattern" (for example) in current and its sub folders.
find ./ -name "pattern"