列出与模式不匹配的文件?

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了列出与模式不匹配的文件?相关的知识,希望对你有一定的参考价值。

以下是如何列出与bash中的模式匹配的所有文件:

ls *.jar

如何列出模式的补充?即所有文件都不匹配* .jar?

答案
ls | grep -v '.jar$'

例如。

另一答案

使用egrep样式的扩展模式匹配。

ls !(*.jar)

这是从bash-2.02-alpha1开始提供的。首先必须启用

shopt -s extglob

从bash-4.1-alpha开始,默认情况下会有一个配置选项来启用它。

另一答案

鲜为人知的bash扩展规则:

ls !(*.jar)
另一答案

POSIX定义了不匹配的括号表达式,因此我们可以让shell为我们扩展文件名。

ls *[!j][!a][!r]

这有一些怪癖,但至少它与任何unix shell兼容。

另一答案

使用适当版本的find,你可以做这样的事情,但它有点矫枉过正:

find . -maxdepth 1 ! -name '*.jar'

find找到文件。 .参数指定您要从.开始搜索,即当前目录。 -maxdepth 1告诉它你只想搜索一个级别,即当前目录。 ! -name '*.jar'查找与正则表达式*.jar不匹配的所有文件。

就像我说的那样,这个应用程序有点过分,但是如果你删除了-maxdepth 1,你可以递归搜索所有非jar文件或者你有什么容易。

另一答案

一个解决方案是ls -1|grep -v '.jar$'

另一答案

如果要排除多个文件扩展名,请使用管道|(如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

另一答案

如果你的ls支持它(man ls)使用--hide=<PATTERN>选项。在你的情况下:

$> ls --hide=*.jar

无需解析ls的输出(因为它非常糟糕)并且它扩展为不显示多种类型的文件。在某些时候,我需要查看(乱码)目录中的非源,非对象,非libtool生成的文件:

$> ls src --hide=*.{lo,c,h,o}

工作就像一个魅力。

另一答案

另一种方法可以使用ls -I标志(忽略模式)。

ls -I '*.jar'

以上是关于列出与模式不匹配的文件?的主要内容,如果未能解决你的问题,请参考以下文章

列出与R中的完整路径模式匹配的所有文件

未腌制的对象与原始对象不匹配

发布模式符号文件 .dll.mdb 中的 Fody 异常与程序集 .dll 不匹配

Oracle 数据库 - 使用UEStudio修改dmp文件版本号,解决imp命令恢复的数据库与dmp本地文件版本号不匹配导致的导入失败问题,“ORACLE error 12547”问题处理(代码片段

解决未能加载文件或程序集“Newtonsoft.Json ...."或它的某一个依赖项。找到的程序集清单定义与程序集引用不匹配。 (异常来自 HRESULT:0x80131040)(代码片段

在erlang中列出尾部模式匹配