如何在所有子文件夹中搜索通配符名称?

Edu*_*scu 52 shell recursive wildcards

如何在所有子文件夹中搜索通配符名称?什么是 DOS 命令的等价物:dir *pattern* /s在 *nix 中?

Rya*_* A. 68

您可以使用find. 例如,如果您想查找文件abcd名中包含的所有文件和目录,您可以运行:

find . -name '*abcd*'
Run Code Online (Sandbox Code Playgroud)

  • 只需添加注释,以防其他人遇到与我相同的困惑:“-name”将查找与文件名匹配的模式,即不是完整路径。因此,如果您正在查找路径中某处包含字符串“string1”,后跟“string2”的文件,则应该使用“find”。-全名“*string1*string2*”`。 (3认同)

Gil*_*il' 16

Zsh:

ls -ld -- **/*abcd*
Run Code Online (Sandbox Code Playgroud)

Ksh93:

set -o globstar     # put this line in your ~/.kshrc
ls -ld -- **/*abcd*
Run Code Online (Sandbox Code Playgroud)

重击?4:

shopt -s globstar   # put this line in your ~/.bashrc
ls -ld -- **/*abcd*
Run Code Online (Sandbox Code Playgroud)

亚什:

set -o extendedglob # put this line in your ~/.yashrc
ls -ld -- **/*abcd*
Run Code Online (Sandbox Code Playgroud)

tcsh:

set globstar
ls -ld -- **/*abcd*
Run Code Online (Sandbox Code Playgroud)

鱼:

ls -ld -- **abcd*
Run Code Online (Sandbox Code Playgroud)

(注意其中一些炮弹降目录树时,将遵循符号链接;有的那些不喜欢的zshyash或者tcsh***/*abcd*这样做)。

便携(除了非常旧的系统;OpenBSD 花了很长时间但终于exec … +从 5.1 开始支持):

find . -name '*abcd*' -exec ls -ld {} +
Run Code Online (Sandbox Code Playgroud)

不是 POSIX,但适用于 *BSD、Linux、Cygwin、BusyBox:

find . -name '*abcd*' -print0 | xargs -0 ls -ld
Run Code Online (Sandbox Code Playgroud)

请注意,除了在某些 BSD 中,如果没有找到匹配的文件,ls -ld将不带参数运行,因此将列出.. 对于某些xargs实现,您可以使用该-r选项来解决该问题。