bash:否定球和多种模式的问题

时间:2018-12-11 19:30:50

标签: bash glob

我正在尝试编写一种glob模式,该模式将返回未以两个可能的后缀之一结尾的文件列表:完成和每月

我的测试目录中的文件列表是:

              mParentActivity.runOnUiThread(new Runnable() {
                    public void run() {
                        mParentActivity.onBackPressed();
                    }
              });

如果仅执行1个后缀,则表示我非常成功:

foo.done
foo.montly
foo.pdf
foo.txt

但是,当我尝试这样的事情时:

ls  !(*done) or ls  !(*monthly)

我明白了:

ls  !({*monthly,*done})

有人可以帮助我理解一个结果,该结果不仅不能产生否定的结果,而且可以列出重复项!

1 个答案:

答案 0 :(得分:1)

使用|分隔模式列表(docs)中的模式:

  

如果使用内置的shopt启用了extglob shell选项,   几个扩展的模式匹配运算符被识别。在里面   在下面的描述中,模式列表是一个或多个列表   模式之间用“ |”分隔。

结果:

$ shopt -s extglob

$ ls
foo.done  foo.monthly  foo.pdf  foo.txt

$ ls *.!(monthly|done)
foo.pdf  foo.txt