[Risolto] listare solo i file doppi bash

Linguaggi di programmazione: php, perl, python, C, bash e tutti gli altri.
gabo
Prode Principiante
Messaggi: 69
Iscrizione: giovedì 19 aprile 2007, 0:26

[Risolto] listare solo i file doppi bash

Messaggio da gabo »

ciao a tutti ,
vorrei verificare quali sono i file doppi in una cartella tramite hash e avere su un file la lista dei soli file che risultano doppi.

il comando che uso è il seguente

[root@pippo prova]# find . -type f | xargs -i md5sum {} | sort -k 1

che mi crea un output di questo tipo:


1bc50c66677667a56c3208e06cf64159  ./prova.txt
244fcba2093a5c942ee11f0f3f28f21f  ./123.txt
244fcba2093a5c942ee11f0f3f28f21f  ./pippo.txt
244fcba2093a5c942ee11f0f3f28f21f  ./qwerty.txt
dc49391bf8a63cc7f93e7ffcf9d1c82e ./2.txt
dc49391bf8a63cc7f93e7ffcf9d1c82e  ./3.txt
eb3ae5ddf6e3e2dc8e317dac03aee249  ./1.txt


ora io vorrei fare in modo di avere (magari sul file) la lista con solo i file doppi: cioè il file 2.txt ed il 3.txt con il reltivo hash dc49391bf8a63cc7f93e7ffcf9d1c82e e i tre file con hash 244fcba2093a5c942ee11f0f3f28f21f in modo da avere nel file solo tutti i doppioni.

Mi sapere dire un modo per estrarre da questa lista solo i doppioni?

grazie
Gabriele
Ultima modifica di gabo il lunedì 7 aprile 2008, 13:59, modificato 1 volta in totale.
M
Scoppiettante Seguace
Scoppiettante Seguace
Messaggi: 752
Iscrizione: sabato 14 ottobre 2006, 15:22
Contatti:

Re: listare solo i file doppi bash

Messaggio da M »

C'è un programmino che fa esattamente quello che ti serve e si chiama fdupes.

ciao,
Marco
http://mtuxland.blogspot.com - fotografia, informatica, musica e tutto quello che mi passa per la testa
gabo
Prode Principiante
Messaggi: 69
Iscrizione: giovedì 19 aprile 2007, 0:26

Re: listare solo i file doppi bash

Messaggio da gabo »

si lo so ma volevo farlo a mano perchè almeno è esportabile dato che vorrei usarlo anche su una macchina AIX dove ho lo stesso problema di file doppi!
Avatar utente
IppatsuMan
Prode Principiante
Messaggi: 199
Iscrizione: mercoledì 14 febbraio 2007, 1:31
Contatti:

Re: listare solo i file doppi bash

Messaggio da IppatsuMan »

In python è piuttosto semplice.

Codice: Seleziona tutto

#!/usr/bin/python

import sys, commands

if __name__ == "__main__":
    if len(sys.argv)!=2:
        print "Uso: %s CARTELLA" % sys.argv[0]
        print "     CARTELLA: cartella in cui ricercare"
        exit(-1)
    findoutput = commands.getoutput("find \""+sys.argv[1]+"\" -type f | xargs -i md5sum {}").split("\n")
    result = {}
    for s in findoutput:
        md5sum = s[:32]
        filename = s[34:]
        if not result.has_key(md5sum):
            result[md5sum] = [filename]
        else:
            curres = result[md5sum]
            curres.append(filename)
            result[md5sum] = curres
    for hash, l in result.items():
        if len(l)>1:
            for f in l:
                print "%s  %s" % (hash, f)
E ha anche complessità O(N). Se vuoi usare solo bash l'unico metodo che mi viene in mente è molto meno efficiente (O(N^2)): sarebbe salvare il risultato di

Codice: Seleziona tutto

find . -type f | xargs -i md5sum {} | sort > hashes
Tenersi gli hash duplicati:

Codice: Seleziona tutto

cat hashes | cut -d" " -f 1 | uniq -d > duplhashes
Poi scorrere duplhashes e per ogni riga trovare in hashes i file corrispondenti.
ハッカー
gabo
Prode Principiante
Messaggi: 69
Iscrizione: giovedì 19 aprile 2007, 0:26

Re: listare solo i file doppi bash

Messaggio da gabo »

ok thx funziona.. approfondirò anche a riguardo dello script in python


Grazie ancora
saluti
Gabriele
Scrivi risposta

Ritorna a “Programmazione”

Chi c’è in linea

Visualizzano questa sezione: 0 utenti iscritti e 4 ospiti