查找名称起始相同的文件

时间:2015-02-26 13:44:07

标签: regex file unix

我有一堆用以下模式命名的文件:

NAME_TYPE.viz

我有兴趣找到有多个文件的所有“NAME”。例如,假设文件列表是

A_type1.viz
A_type2.viz
1_type1.viz
1A_grop.viz
1A_grop2.viz

我想得到“A”和“1A”。

编辑:似乎我还不够清楚。

  1. 我不知道名字是什么,所以我无法搜索特定的模式。

  2. 我只想输出一个NAME列表,其中至少存在两个与模式NAME*.viz匹配的文件,而不是所有NAME,只有一个NAME_*.viz { {1}}。

  3. 提前致谢。

    Edit2:感谢@ hek2mgl我实现了

    的解决方案

    find /my/path/ -type f -name '*_*.viz' | sed -r 's/([^_]+).*/\1/' | sort | uniq -d

3 个答案:

答案 0 :(得分:1)

您可以使用findsed

find /path/to/files type f -name '*_*.viz' | sed -r 's/([^_]+).*/\1/'

上面的命令会递归地查找文件,这意味着它还会在/path/to/files的子文件夹中找到文件。如果您不希望将参数-maxdepth 1传递给find

答案 1 :(得分:0)

find - 仅查找.viz中以/your/path/开头的所有NAME_个文件的解决方案:

find /your/path/ -type f -name "NAME_*.viz"

使用正则表达式:

find /your/path/ -type f -regex ".*/NAME_.*.viz"

因此,如果您想查找以.vizA_开头的所有1A_个文件:

find /your/path/ -type f -regex ".*/1?A_.*.viz"

答案 2 :(得分:0)

你的问题很复杂,我只会使用python。我测试了它,它应该适合你:

#!/usr/bin/python
from __future__ import absolute_import
from __future__ import division
from __future__ import print_function
from __future__ import unicode_literals

import os
import re

names = set({})
for root, dirs, files in os.walk("/your/path"):
    if len(files) > 0:
        for f in files:
            m = re.search('^([^_]+)_.*$', f)
            if m:
                names.add(m.group(1))
for name in names:
    print(name)

将代码放在foo.py并运行python foo.py,您的系统应安装python解释器,大部分都是:D