给定一个包含几千个文件的目录,请输出目录中所有文件名完全相同的列表[重复]

问题描述 投票:-4回答:1

这个问题在这里已有答案:

,即具有相同的内容。

func(a_directory_name)输出 - > {“匹配”:[[fn1,fn2 ...],[fn3,fn4 ...] ...]}

例如func(“/ home / my / files”)其中目录/ home / my / files可能包含foo.txt,foo.iso,foo.jpeg,bar.txt,bar.doc,baz.csv,baz.ppt等并且说文件foo.txt与bar.doc相同,foo.iso与baz.csv和baz.ppt相同,那么输出将是:

{

"matches": [

    [

        "foo.txt",

        "bar.doc"

    ],

    [

        "foo.iso",

        "baz.csv",

        “baz.ppt”

    ]

]

}

您可以使用您喜欢的任何编程语言对响应进行编码

PS。我试过散列,

Please check what I tried

python bash shell groovy
1个回答
0
投票

我认为这就是你要找的......至少在Groovy中:

import groovy.json.JsonBuilder
import java.security.MessageDigest

def folderOfInterest = args[0]

println "Grouping by content for files in ${folderOfInterest}"

def result = new File(folderOfInterest)
    .listFiles({ f -> f.file } as FileFilter)
    .collectEntries { f ->
        [f.name, MessageDigest.getInstance('MD5').with { d ->
            f.eachByte(4096) {
                b, len -> d.update(b, 0, len)
            }
            d.digest().encodeHex().toString()
        }]
    }
    .groupBy { it.value }
    .collect { it.value.keySet() }
    .findAll { it.size() > 1 }

println new JsonBuilder(result).toPrettyString()

保存为Group.groovy然后用groovy Group.groovy /path/to/directory运行它

© www.soinside.com 2019 - 2024. All rights reserved.