Linux 查找前缀和后缀匹配的文件

Linux 查找前缀和后缀匹配的文件,linux,bash,find,Linux,Bash,Find,我想查找文件名的第一部分(直到第一个)与文件扩展名(在最后一个之后)匹配的所有文件 例如,以下文件将匹配: cat.cat cat.txt.cat 而cat.txt.asm则不会 如何使用查找?抱歉,这样更好: 您可以简单地执行以下操作: 例如,查找toto.tata.toto-specific: find . -regex ".*\(toto\)[^\/]*\.\1" 通用: find . -regex ".*/\([^./\]*\)[^\/]*\.\1" 对不起,这样比较好: 您可以简

我想查找文件名的第一部分(直到第一个
)与文件扩展名(在最后一个
之后)匹配的所有文件

例如,以下文件将匹配:

cat.cat
cat.txt.cat
cat.txt.asm
则不会

如何使用
查找

抱歉,这样更好:

您可以简单地执行以下操作:

例如,查找toto.tata.toto-specific:

find . -regex ".*\(toto\)[^\/]*\.\1"
通用:

find . -regex ".*/\([^./\]*\)[^\/]*\.\1"
对不起,这样比较好:

您可以简单地执行以下操作:

例如,查找toto.tata.toto-specific:

find . -regex ".*\(toto\)[^\/]*\.\1"
通用:

find . -regex ".*/\([^./\]*\)[^\/]*\.\1"

使用-regex选项查找

find -regex '.*/\([^.]+\)\.\(.*\.\)?\1'
  • */
    匹配文件的路径
  • \([^.]+\)
    捕获第一个点之前的任何内容(
    +
    表示至少一个字符)
  • \(.*.\)?
    匹配中间部分,即任何以点结尾的内容,但整个内容是可选的
  • \1
    表示重复第一次捕获
在白鹭方言中可能更具可读性:

find -regextype egrep -regex '.*/([^.]+)\.(.*\.)?\1'

使用-regex选项查找

find -regex '.*/\([^.]+\)\.\(.*\.\)?\1'
  • */
    匹配文件的路径
  • \([^.]+\)
    捕获第一个点之前的任何内容(
    +
    表示至少一个字符)
  • \(.*.\)?
    匹配中间部分,即任何以点结尾的内容,但整个内容是可选的
  • \1
    表示重复第一次捕获
在白鹭方言中可能更具可读性:

find -regextype egrep -regex '.*/([^.]+)\.(.*\.)?\1'

对您应该使用find来完成此操作。但是你的问题写得很混乱。如果英语不是你的第一语言,请给我们输入和输出。好的,对不起,再一次。对于脚本,我给出了一个参数,即目录树。然后,它应该遍历所有文件,并查找其中一个扩展名(在点之后)与其在点之前的名称相同的文件-filename.filename您可以使用并学习如何形成适当的regex../script目录///result=file.file,txt.txt,hello.hello。。等等。您应该使用find来完成此操作。但是你的问题写得很混乱。如果英语不是你的第一语言,请给我们输入和输出。好的,对不起,再一次。对于脚本,我给出了一个参数,即目录树。然后,它应该遍历所有文件,并查找其中一个扩展名(在点之后)与其在点之前的名称相同的文件-filename.filename您可以使用并学习如何形成适当的regex../script目录///result=file.file,txt.txt,hello.hello。。这个regexp是错误的。它不会匹配正确的文件,也不会匹配所有文件。regexp错误。它不会匹配正确的文件,也不会匹配所有文件。