Dizinde En Yaygın veya Sık Dosyaları Bulma


1

Çok fazla resimli bir dizim var (100,000+). Bunların birçoğu kopya / özdeş görüntüler ancak açıkçası hepsinde farklı dosya adları var. Bu dizinde en fazla kopyaya sahip görüntüleri bulmam gerekiyor. Örneğin, file1.jpeg'de 120 kopya var, file2.jpeg'de 90 kopya var.

Her dosyanın md5'ini alacağımı ve bir tür işlem yapacağımı düşünüyordum, ancak ayrıntılara dair net değilim. Bu bir kabuk betiği ile yapılabilir mi?

Açıkçası, yinelenenleri kaldırmam gerekmiyor (henüz), hangi dosyaların en çok kopyaya sahip olduğunu bulmam gerekiyor.

Bu yardımcı olursa ben OS X'im.

Yanıtlar:


0

Dosyalar tam olarak çoğaltılırsa, çıktısının işlenmesinden sonra işlenmesi shasum * | sortyardımcı olabilir. Hesaplama bir süre alabileceğinden ve bir kereden fazla ihtiyaç duyacağınız için bir dosyaya kaydedin:

shasum * | sort >/tmp/shasums

Örneğin, aynı dosyaların dağılımını görmek için (dosya adlarını değil, yalnızca sağlama harflerini içeren):

</tmp/shasums cut -d ' ' -f 1 | uniq -c

Hem dosya adlarını hem de yinelenen sayıları görmenin bir yolu:

</tmp/shasums sed 's/ .*//' | uniq -c - | join -1 2 - /tmp/shasums | sort -k 2,1

GNU uniq olmadan, dosya adlarını aşağıdaki Perl betiğinden daha iyi bir şekilde göstermek için önerecek daha iyi bir şeyim yok:

</tmp/shasums perl -lne '
    s/^([^ ]*?)  //; # set $1 to the checksum and $2 to the filename
    push @{$names{$1}}, $_; # dispatch file names by checksum
    END {
        # iterate through the checksums, sorted by repeat count
        foreach (sort {@$a <=> @$b} values %names) {
            # print the repeat count and the file names
            printf "%d %s\n", scalar(@$_), join(" ", @$_)
        }
    }'

1

Bu, kısa çizgi dizileri arasında çiftlerin adlarını yazdıracak hızlı ve kirli bir boru hattıdır. Yalnızca geçerli dizine bakar, ancak findözyinelemeli bir arama yapmak için kullanabilirsiniz .

md5sum *.jpeg | sort | awk '{if ($1 != prev) print "-----"; print $2; prev = $1}'

Örnek çıktı:

-----
unique1.jpeg
-----
dup1.jpeg
dup2.jpeg
dup3.jpeg
-----
same1.jpeg
same2.jpeg
-----
solo1.jpeg
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.