Bash List文件与模式数组不匹配

tfo*_*s74 8 bash pattern-matching

我对bash没有经验,我有一个问题.

我试图选择一些与某个数组o模式不匹配的文件(比如说这个例子的ls).

我有两个组中需要选择的名为Test,Test1,Test2,Test3,Test4,Test5,Test6,Test7,Test8,Test9,Test10的文件.

第一组是Test5,Test6,Test7,Test8,Test9,Test10,我可以使用以下方式列出:

ls -l T*@(5|6|7|8|9|10) or ls -l T*{5,6,7,8,9,10}
Run Code Online (Sandbox Code Playgroud)

由于Test和Test1文件,第二组(对我而言)非常棘手.我试图反转以前的选择/列表..或以某种方式选择其余的.我尝试了几件没有运气的事情:

ls -l T*[!5678910]
ls -l T*[!@(5|6|7|8|9|10)]
ls -l T*[!5][!6][!7][!8][!9][!10]
ls -l T*@(1|2|3|4|)
Run Code Online (Sandbox Code Playgroud)

ps:实际的文件名在数字后面有额外的字符.

anu*_*ava 8

您可以反转这样的模式:

# enable extended glob, if disabled, it will not function
shopt -s extglob

# create our files
touch {Test,Test1,Test2,Test3,Test4,Test5,Test6,Test7,Test8,Test9,Test10}

# list files with matching pattern
ls -1 T*@(5|6|7|8|9|10)
Test10
Test5
Test6
Test7
Test8
Test9


# list files with NOT matching pattern
ls -1 T!(*@(5|6|7|8|9|10))
Test
Test1
Test2
Test3
Test4
Run Code Online (Sandbox Code Playgroud)

  • @ marek.jancuska:我当然用bash和复制/粘贴结果测试了这个.你需要使用`shopt -s extglob`启用`extglob` (2认同)