列出不符合模式的文件?
以下是如何列出与bash中的模式匹配的所有文件:
ls *.jar 如何列出模式的补码? 即所有文件不匹配* .jar?
 ls | grep -v '\.jar$' 
例如。
使用egrep样式的扩展模式匹配。
 ls !(*.jar) 
这可以从bash-2.02-alpha1开始。 必须先启用
 shopt -s extglob 
从bash-4.1-alpha开始,有一个configuration选项来默认启用它。
鲜为人知的bash扩展规则:
 ls !(*.jar) 
 用适当版本的find ,你可以做这样的事情,但这有点矫枉过正: 
 find . -maxdepth 1 ! -name '*.jar' 
  findfind的文件。 的. 参数指定您想要从中开始search. 即当前目录。  -maxdepth 1告诉它你只想search一个深度,即当前目录。 ! -name '*.jar'  ! -name '*.jar'查找与正则expression式*.jar 不匹配的所有文件。 
 就像我说的,这个应用程序有点矫枉过正,但是如果你删除了-maxdepth 1 ,那么你可以recursion地search所有非jar文件或者你有什么容易的。 
POSIX定义了不匹配的括号expression式,所以我们可以让shell为我们扩展文件名。
 ls *[!j][!a][!r] 
这虽然有一些怪癖,但至less它与任何unix shell都兼容。
 一种解决scheme是ls -1|grep -v '\.jar$' 
 如果要排除多个文件扩展名,请使用pipe道将它们分开  ,就像ls test/!(*.jar|*.bar) 。 让我们试试看: 
 $ mkdir test $ touch test/1.jar test/1.bar test/1.foo $ ls test/!(*.jar|*.bar) test/1.foo 
 查看其他答案,您可能需要首先shopt -s extglob 。