【问题标题】:Find files which names start the same查找名称开头相同的文件
【发布时间】:2015-02-26 13:44:06
【问题描述】:

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

NAME_TYPE.viz

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

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

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

编辑:看来我还不够清楚。

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

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

提前致谢。

Edit2:感谢@hek2mgl,我实现了一个解决方案

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

【问题讨论】:

  • 为什么只匹配上面两个?
  • 我犯了一个错误。我编辑改变了这一点。我想找到属于多种类型的所有“NAME”。

标签: regex file unix


【解决方案1】:

您可以使用find 和sed:

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

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

【讨论】:

  • 感谢您的回答,但它似乎并不完全有效。例如,它将 CCNJ_type.viz 和 CCNJL_othertype.viz 标识为相同的“CCNJ”模式。
  • 名称不同,“CCNJ”在第一种情况下,CCNJL 是第二种情况。
  • identifies ... to the same pattern 是什么意思?
  • 对不起,如果我不够清楚。您建议的命令输出“./CCNJ”,当我简单地查看以“CCNJ”开头的所有文件(ls CCNJ*,因为没有子文件夹)时,我有两个,它们是 CCNJ_chr10.viz 和 CCNJL_chr5.viz。再次感谢。
  • 您需要将结果传送到... | sort | uniq -c | awk '$1>1{print $2} | uniq
【解决方案2】:

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

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

使用正则表达式:

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

所以如果你想查找所有以A_ 或1A_ 开头的.viz 文件:

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

【讨论】:

  • 我不知道“NAME”,它基本上可以是字母+数字+破折号的任何组合。您的建议只会输出与模式“NAME_.viz”或“1?A_.viz”匹配的所有文件?这不是我的问题。
  • 当然你必须为你的NAME 模式指定一些正则表达式。如果我的回答对您没有帮助,请更详细地解释您的问题。
  • 我已经编辑了我的问题。但是,我根据@hek2mgl 的建议得出了一个解决方案。还是谢谢。
【解决方案3】:

你的问题很复杂,我只会使用 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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2019-05-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-01-11
    • 2011-06-18
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多