问:
如何根据通配符匹配递归查找当前文件夹和子文件夹中的所有文件?
答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
huntsbot.com精选全球7大洲远程工作机会,涵盖各领域,帮助想要远程工作的数字游民们能更精准、更高效的找到对方。