如何根据通配符匹配递归查找当前文件夹和子文件夹中的所有文件?

问:

如何根据通配符匹配递归查找当前文件夹和子文件夹中的所有文件?

答1:

huntsbot.com聚合了超过10+全球外包任务平台的外包需求,寻找外包任务与机会变的简单与高效。

使用 find:

find . -name "foo*"

find 需要一个起点,因此 .(点)指向当前目录。

我知道这被标记为 linux,但值得一提的是:在非 linux 的其他 *nix 变体上,该路径是必需的。在 linux 上,如果你想使用点,路径是可选的。

@Seatter "foo*" 告诉 find 查找所有以 "foo" 开头的文件。这只是他的榜样。您可以使用“gpio*”来查找名称以 gpio 开头的所有文件,或者只使用“gpio1”来查找所有名为 gpio1 的文件。

请注意,“foo*”在引号中,因此 shell 在将其传递给 find 之前不会对其进行扩展。如果您刚刚执行了 find . foo*,则 foo* 将被扩展,然后传递给 find。

值得强调的是," " 对于递归搜索是非常必要的。

也很有用:如果您不想收到有关您无权访问的目录(或其他错误)的通知,您可以执行 find . -name "foo*" 2>/dev/null

答2:

huntsbot.com – 高效赚钱,自由工作

管道 find 到 grep 通常更方便;它为您提供了用于任意通配符匹配的正则表达式的全部功能。

例如,要查找文件名中包含不区分大小写字符串“foo”的所有文件:

~$ find . -print | grep -i foo

huntsbot.com提供全网独家一站式外包任务、远程工作、创意产品分享与订阅服务!

find 还具有用于不区分大小写的通配符、正则表达式和不区分大小写的正则表达式匹配的 -iname、-regex 和 -iregex 标志,因此无需通过管道连接到 grep。

我不认为这是不必要的,而是更方便。

但是,通过管道 grep -v 可以让您使用简单的字符串或正则表达式来删除您不想要的条目。

@iobender - 遗憾的是,我可以根据经验告诉您,并非所有系统都带有支持这些选项的 find 命令。有时 grep 成为唯一的选择。

这里的一个重要警告是,如果您在包含大量文件的目录上使用 find(例如;``),那么这可能会很慢。

答3:

huntsbot.com全球7大洲远程工作机会,探索不一样的工作方式

find 将查找与某个模式匹配的所有文件:

find . -name "*foo"

但是,如果你想要一张图片:

tree -P "*foo"

希望这可以帮助!

brew install tree 适用于未安装 apt-get 的 Mac OSX 用户

在 macOS Sierra 上测试,只需添加 '--print' -> ' 寻找 。名称 "*foo" --print ' 。 superuser.com/questions/177289/searching-mac-through-terminal

sudo yum install tree -y for CentOS

答4:

huntsbot.com – 程序员副业首选,一站式外包任务、远程工作、创意产品分享订阅平台。

fd

如果 find 太慢,请尝试 fd 实用程序 - 用 Rust 编写的 find 的简单快速替代方案。

句法:

fd PATTERN

演示:

https://github.com/sharkdp/fd/raw/master/doc/screencast.svg?sanitize=true

主页:https://github.com/sharkdp/fd

近 9 年来我第一次看到关于 SO 的 gif。不错的工作!

这些性能结果看起来非常有希望。您可以考虑将 fd 添加到 home-brew ...

题外话:您使用什么工具为演示创建 svg 文件?

@aprodan 演示图像是从 GitHub 复制的,但我相信他们使用的是 asciinema,然后转换为 GIF 格式,但我不确定。

实际上它是 SVG 格式,所以可能 asciicast2vector 可以使用。

答5:

huntsbot.com聚合了超过10+全球外包任务平台的外包需求,寻找外包任务与机会变的简单与高效。

find -L . -name "foo*"

在少数情况下,我需要 -L 参数来处理符号目录链接。默认情况下,符号链接被忽略。在这些情况下,这很令人困惑,因为我会将目录更改为子目录并查看与模式匹配的文件,但 find 不会返回文件名。使用 -L 解决了这个问题。 find 的符号链接选项是 -P -L -H

L 开关非常有用。很多时候用户对底层目录一无所知,无论它们是软链接还是普通目录。因此,如有疑问,使用 L 选项总是好的。至少,它一直对我有帮助。

这就是我的答案。谢谢!

答6:

huntsbot.com – 高效赚钱,自由工作

如果您的 shell 支持 a new globbing option(可以通过:shopt -s globstar 启用),您可以使用:

echo **/*foo*

递归查找任何文件或文件夹。这受到 Bash 4、zsh 和类似 shell 的支持。

我个人已经定义了这个 shell 函数:

f() { find . -name "*$1*"; }

注意:以上行可以直接粘贴到 shell 或添加到用户的 ~/.bashrc 文件中。

然后我可以通过键入以下内容来查找任何文件:

f some_name

或者,您可以使用具有简单语法的 fd utility,例如 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

答7:

一个优秀的自由职业者,应该有对需求敏感和精准需求捕获的能力,而huntsbot.com提供了这个机会

利用

find path/to/dir -name "*.ext1" -o -name "*.ext2"

解释

第一个参数是要搜索的目录。默认情况下 find 进行递归。 -o 代表 - 或。所以上面的意思是搜索这个通配符或这个。如果您只有一种模式,则不需要 -o。通配符模式周围的引号是必需的。

答8:

huntsbot.com – 程序员副业首选,一站式外包任务、远程工作、创意产品分享订阅平台。

find   -type f -name ""

在通配符匹配中,您可以提供您希望匹配的字符串,例如 *.c(适用于所有 c 文件)

您的答案在这里是第一个最正确的,因为它只搜索指定的文件。其他未指定类型的将返回目录。

如果您想搜索目录“-type f”可以更改为“-type d”

默认情况下,find 检测符号 file 链接(但不检测符号 directory 链接中的链接)。 -type f 将导致 find 检测不到符号 file 链接。如果您还想包含指向文件的符号链接,请使用 -L: find -L -type f。不要使用 -type f,l,因为它还会包含符号 目录 链接。

答9:

huntsbot.com全球7大洲远程工作机会,探索不一样的工作方式

您可以使用:

# find . -type f  -name 'text_for_search'

如果您想使用 REGX,请使用 -iname

# find . -type f  -iname 'text_for_search'

答10:

打造属于自己的副业,开启自由职业之旅,从huntsbot.com开始!

用于文件搜索 find / -xdev -name settings.xml -->整台计算机 find ./ -xdev -name settings.xml -->当前目录 &它的子目录用于文件扩展类型

find . -type f -name "*.iso"

答11:

HuntsBot周刊–不定时分享成功产品案例,学习他们如何成功建立自己的副业–huntsbot.com

我很惊讶地发现,当我们要递归时,locate 并没有被大量使用。

我会先定位“$PWD”以获取当前感兴趣的文件夹中的文件列表,然后随意对它们运行 greps。

locate "$PWD" | grep -P 

当然,这是假设 updatedb 已经完成并且索引会定期更新。这种查找文件的方法比运行查找并要求它沿树向下查找要快得多。为了完整起见,提到这一点。如果树不是很重,没有什么反对使用 find 的。

locate "$PWD*.mp4" 只是提醒您可以跳过 grep

原文链接:https://www.huntsbot.com/qa/EVve/how-can-i-recursively-find-all-files-in-current-and-subfolders-based-on-wildcard?lang=zh_CN&from=csdn

huntsbot.com精选全球7大洲远程工作机会,涵盖各领域,帮助想要远程工作的数字游民们能更精准、更高效的找到对方。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值