Pao*_*olo 119 shell bash recursive wildcards
我想写这样的东西:
$ ls **.py
Run Code Online (Sandbox Code Playgroud)
为了获得所有 .py 文件名,递归遍历目录层次结构。
即使要查找 .py 文件,shell (bash) 也会给出以下输出:
ls: cannot access **.py: No such file or directory
Run Code Online (Sandbox Code Playgroud)
有什么办法可以做我想做的事吗?
编辑:我想说明我对 的特定情况不感兴趣ls,但问题是关于 glob 语法。
jor*_*anm 145
为了在 bash 中执行递归 glob,您需要globstarbash 版本 4 或更高版本的功能。
从 bash 联机帮助页:
globstar
    If set, the pattern ** used in a pathname expansion context will
    match all files and zero or more directories and subdirectories.
    If the pattern is followed by a /, only directories and
    subdirectories match.
Run Code Online (Sandbox Code Playgroud)
对于您的示例模式:
shopt -s globstar
ls -d -- **/*.py
Run Code Online (Sandbox Code Playgroud)
        don*_*l24 18
find . -name '*.py'
Run Code Online (Sandbox Code Playgroud)
** 只做一个 * ,都在当前目录下操作
ken*_*orb 14
自 Bash 4(也包括 zsh)以来,添加了一个新的通配选项( globstar) **,它在设置模式时会以不同的方式处理模式。
它匹配通配符模式并返回匹配的文件和目录名称,然后将命令中的通配符模式替换为匹配的项目。
通常,当您使用 时**,它的工作方式类似于*,但它会递归地递归所有目录(如循环)。
要查看它是否已启用,请检查它shopt globstar(在脚本中,使用shopt -q globstar)。
该示例**.py仅适用于当前目录,因为它不返回可以递归的目录列表,因此您需要使用多个目录级通配符**/*.py,以便它可以更深入。
在此处查看递归查找文件的示例。
|   归档时间:  |  
           
  |  
        
|   查看次数:  |  
           74247 次  |  
        
|   最近记录:  |