列出不符合模式的文件?
以下是如何列出与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'
find
find的文件。 的.
参数指定您想要从中开始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
。