How can I recursively find all files in current and subfolders based on wildcard matching?
如何根据通配符匹配递归查找当前和子文件夹中的所有文件?
使用定位是:
find需要一个起点,和.(点)的两个点的当前目录。
- find需要一个起始点,而(dot)正在选择当前目录。例如,如果您在/home/myuser中,find /home/myuser和find .的结果相同。
- 我知道这被标记为Linux,但值得一提的是:在其他*nix变体(而不是Linux)上,路径是必需的。在Linux上,如果您想使用点,那么路径是可选的。
- 有人能解释一下"foo*"部分吗?谢谢。
- @seatter"foo*"告诉find查找以"foo"开头的所有文件。这只是他的例子。您可以使用"gpio*"查找名称以gpio开头的所有文件,或者只使用"gpio1"查找名称为gpio1的所有文件。
- *是通配符-这里有更多的通配符可能性:tldp.org/ldp/gnu-linux-tools-summary/html/x11655.htm
- 注意,"foo*"在引号中,所以shell在传递给find之前不会展开它。如果你刚刚做了find . foo*,foo*将被扩展,然后通过查找。
- 使用-不区分大小写
- 我在当前工作目录的子目录中有一个test.xml文件,并使用了命令find。-命名"测试*"。它不起作用。
- 出于某种原因,当输入sh脚本时,它不起作用。它需要重击还是什么?
- 值得强调的是,对于递归搜索,""是非常必要的。
- 同样有用的是:如果您不想收到关于您没有权限(或其他错误)的目录的通知,可以执行find . -name"foo*" 2>/dev/null。
- 如果您希望忽略案例(在大多数情况下,当我使用这个时),那么您可以这样做:查找。-名字"Fo*"
- 作为对@islandow评论的回应:这不是真的(至少不是到处都是)。我必须在我的软呢帽盒上明确地使用''。
- @WesternGun你能解释一下为什么需要""吗?什么是"扩张",为什么是坏的?
- @KolobCanyon您可以查看find的手册页,或者这个链接,搜索单词"non-bug",然后搜索"quote",这里您有更多的信息。另外,检查这个。通常,*扩展是"迭代当前目录,并用每个文件名替换*号"。因此,为了避免这种情况,我们使用引号。
- @WesternGun与字符串插值不同吗?因为我认为引号意味着在shell中插入字符串
- @Kolobcanyon就是这样,但是联系更多,我认为扩展范围更广。
- 是否可以按目录对结果分组?我不想显示每个文件,而是希望看到这些文件的位置。
- 这太荒谬了…如果我只想在当前目录中搜索怎么办??
- @阎王尹-用江户十一〔九〕?
piping grep查找到更多的往往是convenient;它给你的全功率的四正则表达式的匹配对野生卡。
例如,找到所有病例档案与钝感的字符串"foo"文件名:
1
| ~$ find . -print | grep -i foo |
- find还具有-iname、-regex和-iregex标志,用于不区分大小写的通配符、regex和不区分大小写的regex匹配,因此不需要管道到grep上。
- 我认为这不是不必要,而是更方便。
- 但是,通过管道到grep-v可以使用简单的字符串或正则表达式删除不需要的条目。
- @iobender——不幸的是,我可以根据经验告诉您,并非所有系统都带有支持这些选项的find命令。有时,grep成为唯一的选择。
find会找到所有匹配的文件是A型:
然而,如果你想要一个画面:
希望这helps!
- 不安装apt-get的Mac OSX用户的brew install tree。
- 在Macos Sierra上测试,只需添加"--print"->"find"。名称"*foo"--打印。superuser.com/questions/177289/searching mac through termina‌&8203;l
- sudo yum安装tree-y for centos
在几个案例中,有需要的参数的两个目录的符号链接的行为。城市的默认符号链接是不容忽视的。在那些情况是很长confusing AA会改变目录的子目录和文件,看到的模式匹配,但找不回我的文件名。用你那solves事件。"查找符号链接选项- P L H
- L开关非常有用。很多时候,用户都不知道底层目录,不管它们是软链接的还是普通目录。因此,如果有疑问,使用l选项总是很好的。至少,它一直对我有帮助。
如果你支持一个新的壳(shell选项可以激活城市:shopt -s globstar),你可以使用。
找到的任何文件或folders recursively。这是支持Bash 4市,壳牌和Zsh相似。
道贺的有壳的定义:这个功能
1
| f() { find . -name"*$1*"; } |
注:以上线可以糊加两个壳或直接进入你的用户的~/.bashrc文件。
然后我看任何城市typlng档案:
你可以使用一alternatively fd效用与一个简单的语法,例如fd pattern。
- 这只是一个层次。不递归到我的子目录中
- @broncha是因为您需要通过shopt -s globstar命令激活扩展的全局设置。这在bash、zsh和类似的shell中得到了支持。
- bash-3.2$ shopt -s globstar给bash: shopt: globstar: invalid shell option name。
- @drewish您需要将bash升级到4.x
- echo*/*foo比find快
1
| find <directory_path> -type f -name"<wildcard-match>" |
在野生卡匹配的字符串,你可以提供你希望比赛如*(C C的所有文件)
- 您的答案在这里是第一个最正确的,因为它只搜索指定的文件。其他未指定类型的将返回目录。
fd 在情况下,find冰太慢,试图fd公用一个简单和固定在两个find替代老化生锈。
语法:
演示:

- 近9年来,我第一次看到这么一个GIF。干得好!
- 这些性能结果看起来非常有希望。您可以考虑将fd添加到家庭BREW中…
- 主题外:您使用什么工具来创建用于演示的SVG文件?
- @演示图片是从Github复制的,但我相信他们使用的是asciinema,然后转换为gif格式,但我不确定。
- 实际上它是SVG格式,所以可能可以使用asciicast2vector。
你可以使用。
1
| # find . -type f -name 'text_for_search' |
如果你想要使用regx使用-iname
1
| # find . -type f -iname 'text_for_search' |
默认的递归方式搜索文件,可在大多数用例和冰淇淋
1
| find . -name"filepattern" |
它开始traversing递归模式为文件名或目录内的电流从在你的位置。与你的命令,你可以使用通配符,和各种开关,看到的全科型战略期权
或如果你页面的不可用的系统。
然而,有更多的现代工具我找鸭的阿姨,这是你的整个文件系统和traversing密封你的档案,一个这样的普通工具或冰locate slocate / mlocate,你应该检查你的在线手册,我们如何安装它,一旦它的安装需要两个发起信息数据库,如果不安装脚本这不是你的你,它可以完成的手册地市typlng
鸭子,看两个使用它的一些特殊的文件类型
或者,看看两个奶头从文件名或目录内的电流型的,你可以:
1
| pwd | xargs -n 1 -I {} locate"filepattern" |
看通网络将其数据库的文件的路径和名称,打印出的悲哀,模式匹配,你有型。 看到全表locate期权的类型: locate --help或man locate
你可以locate additionally configure更新数据库信息的在线预定时报通过cron作业,所以样品cron更新数据库,以1am会看起来像:
这些计划需要两个工作configured根市需求,因为updatedb特权两根导线的整个文件系统。
文件搜索 find / -xdev -name settings.xml全电脑… find ./ -xdev -name settings.xml-当前目录及子目录中的应用 为文件类型和扩展
1
| find . -type f -name"*.iso" |
下面的命令将列出当前文件夹及其子文件夹中具有确切名称"pattern"(例如)的所有文件。
find ./ -name"pattern"
下面的命令有助于搜索任何文件1)不论情况如何2)未经许可排除文件夹的结果3)从根目录或您喜欢的路径进行搜索。更改/使用您喜欢的路径。Syntax:find-iname""2>&;1_grep-v"权限被拒绝"例子
find / -iname 'C*.xml' 2>&1 | grep -v"Permission denied"
1
| find / -iname '*C*.xml' 2>&1 | grep -v"Permission denied" |
- 你为什么要用grep?只需将stderr重定向到空find / -iname '*C*.xml' 2>/dev/null。
这将搜索当前目录和子目录中的所有相关文件,分别计算它们的行数,以及全部行数:
1
| find . -name"*.wanted" | xargs wc -l |
如果你想要搜索的两个特殊文件与野生卡,你可以使用下面的代码:
1
| find . -type f -name"*.conf" |
假如,你想搜索的每一.conf档案从这里:
.均值搜索(电流从这里开始的地方 -type均值of search item,这里冰文件(F)。 你想-name均值与.conf *搜索文件名。