在Linux中如何使用find和正则表达式或类似的方式而不编写脚本来搜索具有多个“点”但IGNORE扩展名的文件。
例如,搜索以下文件只会返回第二个文件。在这个例子中,“。ext”是扩展名。
testing1234hellothisisafile.ext
testing.1234.hello.this.is.a.file.ext
解决方案应该使用文件名中的一个或多个点(忽略扩展点)。这也适用于任何文件,即任何文件扩展名
提前致谢
答案 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
参数扩展是你的朋友。