搜索具有多个“点”字符的文件

时间:2012-08-10 11:13:09

标签: linux design-patterns find character

在Linux中如何使用find和正则表达式或类似的方式而不编写脚本来搜索具有多个“点”但IGNORE扩展名的文件。

例如,搜索以下文件只会返回第二个文件。在这个例子中,“。ext”是扩展名。

testing1234hellothisisafile.ext
testing.1234.hello.this.is.a.file.ext

解决方案应该使用文件名中的一个或多个点(忽略扩展点)。这也适用于任何文件,即任何文件扩展名

提前致谢

2 个答案:

答案 0 :(得分:2)

因此,如果我理解正确,您希望获得名称中至少有两个额外点的文件名。这样做:

$ find -regex ".*\.+[^.]*\.+[^.]*\.+.*"
./testing.1234.hello.this.is.a.file.ext
./testing1234.hellothisisafile.ext
$ find -regex ".*\.+[^.]*\.+[^.]*\.+[^.]*\.+.*"
./testing.1234.hello.this.is.a.file.ext

关键点检测部分是\.+(至少一个点),加上分离任何东西(但是一个点,但前一部分已经覆盖它;一个针对贪婪匹配的安全措施){{1} }。它们共同构成了正则表达式的核心部分 - 我们不关心之前或之后是什么,只是在某个地方有三个点。三个也是当前目录中的一个很重要 - 如果您要从其他地方搜索,请删除一个[^.]*组:

\.+[^.]*

在这种情况下,结果是相同的,因为名称包含许多点,但第二个正则表达式是正确的。

答案 1 :(得分:-1)

简单的答案是

for f in *.ext; do echo "${f%.*}"; done

参数扩展是你的朋友。