我想写这样的东西:
$ ls **.py为了获得所有.py文件名,递归地遍历目录层次结构。
即使有需要查找的.py文件,shell (bash)也会给出以下输出:
ls: cannot access **.py: No such file or directory有办法做我想做的事吗?
编辑:我想说明我对ls的具体情况不感兴趣,但问题是关于glob语法的。
发布于 2012-10-04 15:47:01
为了在bash中执行递归全局,您需要来自Bash 4或更高版本的globstar特性。
来自巴什文档:
如果设置了
globstar,则在文件名扩展上下文中使用的模式**将匹配所有文件以及零或多个目录和子目录。如果模式后面跟着一个/,那么只有目录和子目录匹配。
对于您的示例模式:
shopt -s globstar
ls -d -- **/*.py发布于 2012-10-04 15:41:17
find . -name '*.py'**只执行一个*,它们都在当前目录中操作。
发布于 2015-04-20 10:07:32
自从Bash 4(也包括zsh)被添加以来,一种新的全球化选择 (globstar)就被添加了,它在设置模式**时会以不同的方式对待它。
它匹配通配符模式,并返回匹配的文件和目录名称,然后将命令中的通配符模式替换为匹配的项。
通常,当您使用**时,它的工作方式类似于*,但是它递归地递归所有目录(就像循环一样)。
要查看是否启用了它,请通过shopt globstar检查它(在脚本中,使用shopt -q globstar)。
示例**.py只适用于当前目录,因为它不返回可以递归的目录列表,因此需要使用多目录级别的通配符**/*.py,因此可以进行更深入的操作。
看这儿用于递归查找文件的示例。
https://unix.stackexchange.com/questions/49913
复制相似问题