以Bash扩展模式转义@(..)

Asg*_*air 5 regex bash glob pattern-matching

我偶然发现了Bash的"扩展模式"extglob.http://wiki.bash-hackers.org/syntax/pattern

我在调查这个案子:

想象一下像这样的目录结构:

/basedir/2017/02/26/uniquedirs1/files.log 
/basedir/2017/02/27/uniquedirs2/files.log 
/basedir/2017/02/28/uniquedirs3/files.log 
/basedir/2017/03/01/uniquedirs4/files.log
/basedir/2017/03/02/uniquedirs5/files.log
Run Code Online (Sandbox Code Playgroud)

如果我想列出目录中的文件2017/02/272017/02/28我可以简单的写:

ls /basedir/2017/02/@("27"|"28")/*/files.log
Run Code Online (Sandbox Code Playgroud)

真棒!\ O/

现在的问题.如何在Bash扩展模式中定义多个目录?
这不起作用:

ls /basedir/2017/@("02/28"|"03/01")/*/files.log
ls /basedir/2017/@("02\/28"|"03\/01")/*/files.log
Run Code Online (Sandbox Code Playgroud)

有什么办法可以为"扩展模式"定义多个目录吗?

che*_*ner 4

路径名生成仅将模式应用于路径名组件;它们从不匹配/分隔组件的。这里的大括号扩展会更干净:

ls /basedir/2017/{2/28,3/01}/*/files.log
Run Code Online (Sandbox Code Playgroud)

首先会扩展到

ls /basedir/2017/2/28/*/files.log /basedir/2017/3/01/*/files.log
Run Code Online (Sandbox Code Playgroud)

在对两个结果模式执行路径名生成之前。