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