我想找到文件名第一部分(直到第一个.
)与文件扩展名匹配(在最后一个.
之后)的所有文件。
例如,以下文件将匹配:
cat.cat
cat.txt.cat
而cat.txt.asm
不会。
如何使用find
执行此操作?
使用 -regex 选项find
:
find -regex '.*/([^.]+).(.*.)?1'
-
.*/
与文件的路径匹配 -
([^.]+)
捕获第一个点之前的任何内容(+
表示至少一个字符) -
(.*.)?
匹配中间部分,即任何以点结尾的东西,但整个事情是可选的 -
1
表示重复第一次捕获
在egrep方言中可能更具可读性:
find -regextype egrep -regex '.*/([^.]+).(.*.)?1'
find . -type f -iname "*" | awk -F/ '{print $2}' |awk -F. '$1==$NF'
Or
ls -1 | awk -F. '$1==$NF'
对不起,这样更好:
您可以简单地这样做:
例如,查找toto.tata.toto特定:
find . -regex ".*(toto)[^/]*.1"
通用:
find . -regex ".*/([^./]*)[^/]*.1"