我有一个glob模式{,**/}*.*
,用于递归当前目录中的所有文件以及子目录。在终端中,如果我运行echo {,**/}*.*
,它将输出当前目录中的所有文件以及嵌套目录。当我运行包含此行的shell脚本时,它只会执行一个深度目录。
我理解terminal has different behaviour than the shell:添加shopt -s extglob
没有任何区别。
#!/bin/bash
shopt -s extglob
echo {,**/}*.*
我在MacOSX上启用了Bash 4 terminal和shopt -s globstar
。
答案 0 :(得分:1)
感谢@Aserre和@anubhava,它确实是bash路径的组合,并确保启用了globstar(对于MacOSX)。完整的脚本是:
#!/usr/local/bin/bash
shopt -s globstar
echo {,**/}*.*
是的./**
就足够了,但这不是我的问题:)
答案 1 :(得分:0)
{,**/}*.*
不会为您提供当前目录中的所有文件以及子目录。相反,它会为您提供格式的结果
directory/file.ext
您可能已使用./**
代替
如果你是globstar,**
将扩展到文件夹中的所有内容。即做
shopt -s globstar
echo ./** # this would suffice
除此之外,借用[ this ]注释,您需要使用支持globstar的shell版本。您可以从getting
中看出这一点shopt: globstar: invalid shell option name
然后,
#!/bin/bash -> #!/usr/local/bin/bash
应该做的工作