Doppelte Dateien finden und löschen

Dieses Thema im Forum "Shell-Skripte" wurde erstellt von ianders, 08.03.2008.

Status des Themas:
Es sind keine weiteren Antworten möglich.
  1. #1 ianders, 08.03.2008
    Zuletzt bearbeitet: 08.03.2008
    ianders

    ianders Linux Jungspund

    Dabei seit:
    13.09.2006
    Beiträge:
    112
    Zustimmungen:
    0
    Ort:
    Berlin
    Hallo ihr,

    ich bin gerade dabei mir ein Script zusamen zu basteln welches doppelte Dateien findet und nach Wahl auch löschen kann. Dabei gehe ich davon aus, dass sich die gleichen Dateien in verschiedenen Verzeichnissen befinden.
    leider habe ich vom Script schreiben nicht viel Ahnung und habe mir daher mit Google weiter geholfen, verschiedenes mit Testdateien rumprobiert bis ich zumindest die erste Scripthälfte zusammen hatte. Aber jetzt komme ich nicht weiter, daher die Frage ob ihr nicht ein paar Ideen habt wie ich das Script fertig bekomme. :hilfe2:
    Code:
    [COLOR=Gray][I]geänderte Version:[/I][/COLOR]
    #!/bin/bash
    trap 'test -d doppelttmp && rm -r doppelttetmp; exit 1' 2
    mkdir doppelttmp
    
    echo "Für jede Datei die Prüfsumme berechnen und in einer temporären Datei speichern"
    echo "Verzeichniss angeben aber ACHTUNG Achtung: nichs fuer $HOME:"
    read verz
    
    # Für jede Datei die Prüfsumme berechnen und in temporärer Datei speichern
    
    if [ -z "$verz" ] ; then
        class=`groups`
        user=`whoami`
        echo "Suchen nach Dateien in /users/class/$class/$user..."
        find /users/class/"$class"/"$user" -exec md5sum {} \; > doppelttmp/sum.unsorted
        #cat doleer.tmp
    else
        echo "Suchen nach Dateien in $verz..."
        find "$verz" -exec md5sum {} \; > doppelttmp/sum.unsorted
        #cat doleer.tmp
    fi
    # Die Prüfsummen sortieren
    sort < doppelttmp/sum.unsorted > doppelttmp/sum.sorted
    # Alle Doppelten Summen finden und speichern
    cut -f 1 -d " " doppelttmp/sum.sorted | uniq -d > doppelttmp/sum.dupe
    # Die Dateinamen zu den Doppelten Summen finden und ausgeben
    grep -F -f doppelttmp/sum.dupe doppelttmp/sum.sorted
    echo "Verzeichniss angeben aus welchem die Dateien gelöscht werden sollen. Achtung: nichs fuer $HOME:"
    read verz
    
    # Dateien im Angegebenen Verzeichnis löschen, sofern sie in der Liste der doppelten Dateien sind 
    
    [I]# wie macht man das?[/I]
    
    # aus weierem Verzichnis dateien löschen oder programm ende
    
    [I]# wie macht man das?[/I]
    
    # test -d doppelttmp && rm -r doppelttmp
    exit 0
    
    #-----ERRORCODES-----
    #1 -- CTRL + C abbruch
    

    Danke :)
     
  2. Anzeige

    Schau dir mal diese Kategorie an. Dort findest du bestimmt etwas.
    Registrieren bzw. einloggen, um diese und auch andere Anzeigen zu deaktivieren
  3. #2 Aqualung, 08.03.2008
    Aqualung

    Aqualung Routinier

    Dabei seit:
    12.02.2008
    Beiträge:
    404
    Zustimmungen:
    0
  4. #3 Gott_in_schwarz, 08.03.2008
    Gott_in_schwarz

    Gott_in_schwarz ar0

    Dabei seit:
    22.04.2007
    Beiträge:
    546
    Zustimmungen:
    0
    Ort:
    Niedersachsen
    das ist mal ziemlich daneben und hättest du dir wirklich sparen können.
    wenn du unbedingt das hier gepostete skript "fertigstellen" willst (rather than use fdupes), rate ich dir zur lektüre von
    Code:
    man uniq
    einen tip geb ich dir mal:
    Code:
    uniq -w 32
    bzw:
    Code:
    uniq --check-chars=32
    vergleicht jeweils nur die ersten 32 zeichen. (jetzt rate mal, wie lang die hexadezimale darstellung einer md5 summe ist..)

    und weils so schön ist:
    Code:
    echo "123456789abcdef /path/to/sum/file/file.html" | awk '{print $2}'
    gibt dir nur "/path/to/sum/file/file.html" aus.

    da du uns ja in unsäglich eloquenter manier deinen wissensstand was bash-skripte angeht mitgeteilt hast ("WIE MACHT MAN DAS??????????????????????????????????"), kann(/will) ich dir nicht spezifischer helfen.
     
  5. worker

    worker König

    Dabei seit:
    29.03.2007
    Beiträge:
    848
    Zustimmungen:
    0
    @Gott_in_schwarz:

    1. Zitiere gefälligst richtig !!

    2. Bevor Du hier mal wieder jemanden dermaßen niedermachst ... hast du schon mal was von Groß- und Kleinschreibung gehört ?!!

    3. Was soll eigentlich dieses Herabwürdige in deinen Threads ? Hast Du ständig diese Anfälle ? Falls ja, dann solltest Du mal einen Arzt konsultieren !

    4. Verlangt auch keiner von dir.

    a) Er hat klargemacht, dass er zuerst selber Initiative ergriffen hat.
    b) Er hat keine Ahnung von Shell-Scripten (und von Programmierung generell?).

    Nun hab dich wohl ... (oder auch nicht ...)
     
  6. #5 Gott_in_schwarz, 08.03.2008
    Gott_in_schwarz

    Gott_in_schwarz ar0

    Dabei seit:
    22.04.2007
    Beiträge:
    546
    Zustimmungen:
    0
    Ort:
    Niedersachsen
    es ging schlicht und ergreifend um das hier:
    Code:
    echo -n "wie macht man das??????????????????????????????????????"|egrep -o '\?+'|wc -c
    39
    was ist so schlimm daran ihm mitzuteilen, dass er sich 38 von den 39 fragezeichen hätte sparen können?

    und du schreibe bitte richtiges deutsch.
    groß- und kleinschreibung sind mir geläufig, jedoch verzichte ich bewusst darauf. (tippt sich leichter...)

    btw: wo habe ich denn bitte hier falsch zitiert?
     
  7. #6 Ararat++, 08.03.2008
    Ararat++

    Ararat++ GESPERRT!

    Dabei seit:
    31.01.2008
    Beiträge:
    31
    Zustimmungen:
    0
    Artet jetzt hier JEDER Thread aus?

    Gewöhnungssache. Mir rutscht das mittlerweile aus der Hand.
     
  8. worker

    worker König

    Dabei seit:
    29.03.2007
    Beiträge:
    848
    Zustimmungen:
    0
    Komm, ich nehm' dich mal an die Hand ...

    Und nun das andere Händchen ...

    Wo sind denn seine 39 Fragezeichen ?

    Oh mein Gott (nicht du) - ich habe mir einen Rechtschreibfehler erlaubt.

    Das glaub' ich nicht so recht ...

    Achso ... also ianders wirfst du Faulheit (indirekt) vor, bist aber selber so.
    Ah, ja.

    So, nun ist der Kindergarten zu und ab in die Haja.
     
  9. #8 ianders, 08.03.2008
    Zuletzt bearbeitet: 08.03.2008
    ianders

    ianders Linux Jungspund

    Dabei seit:
    13.09.2006
    Beiträge:
    112
    Zustimmungen:
    0
    Ort:
    Berlin
    moin,

    danke für die Tipps, aber irgendwie geht das noch nicht so ganz wie gewünscht, habe wohl noch nicht raus wie mit uniq richtig umgegangen wird...
    Code:
    [I][COLOR="Gray"]veränderte Version:[/COLOR][/I]
    #!/bin/bash
    trap 'test -d doppelttmp && rm -r doppelttetmp; exit 1' 2
    mkdir doppelttmp
    
    echo "Für jede Datei die Prüfsumme berechnen und in einer temporären Datei speichern"
    echo "Verzeichniss angeben aber ACHTUNG Achtung: nichs fuer $HOME:"
    read verz
    
    # Für jede Datei die Prüfsumme berechnen und in temporärer Datei speichern
    
    if [ -z "$verz" ] ; then
        class=`groups`
        user=`whoami`
        echo "Suchen nach Dateien in /users/class/$class/$user..."
        find /users/class/"$class"/"$user" -exec md5sum {} \; > doppelttmp/sum.unsorted
        #cat doleer.tmp
    else
        echo "Suchen nach Dateien in $verz..."
        find "$verz" -exec md5sum {} \; > doppelttmp/sum.unsorted
        #cat doleer.tmp
    fi
    # Die Prüfsummen sortieren
    sort < doppelttmp/sum.unsorted > doppelttmp/sum.sorted
    # Alle Doppelten Summen finden und speichern
    cut -f 1 -d " " doppelttmp/sum.sorted | uniq -d > doppelttmp/sum.dupe
    # Die Dateinamen zu den Doppelten Summen finden und ausgeben
    grep -F -f doppelttmp/sum.dupe doppelttmp/sum.sorted
    echo "Verzeichniss angeben aus welchem die Dateien gelöscht werden sollen. Achtung: nichs fuer $HOME:"
    read verz
    
    # Dateien im Angegebenen Verzeichnis löschen, sofern sie in der Liste der doppelten Dateien sind 
    if [ -z "$verz" ] ; then
        class=`groups`
        user=`whoami`
        echo "Suchen nach Dateien in /users/class/$class/$user..."
        find /users/class/"$class"/"$user" -exec md5sum {} \; > doppelttmp/sum.loesch
    else
        echo "Suchen nach Dateien in $verz..."
        find "$verz" -exec md5sum {} \; > doppelttmp/sum.loesch
    fi
    # Die Prüfsummen sortieren
    sort < doppelttmp/sum.loesch > doppelttmp/sum.sortloesch
    # vergleiche die ersten 32 Zeichen in den Zeilen der beiden dateien und erstelle eine datei mit den übereinstimmungen
    uniq --check-chars=32 < doppelttmp/sum.dupe doppelttmp/sum.sortloesch > doppelttmp/sum.wegdamit
    # Die Dateinamen zu den Doppelten Summen finden und ausgeben
    grep -F -f doppelttmp/sum.dupe doppelttmp/sum.wegdamit
    
    #  echo "SICHER DASS ALL DIESE DATEIEN GELÖSCHT WERDEN SOLLEN? (y/n)"
    #  echo ' yes ? '
    #    read best
    #    if [ "$best" = y ] ; then
    #       echo "geht noch nicht mangels idee"
    #    fi
    
    # aus weierem Verzichnis dateien löschen oder programm ende
    # wie macht man das?
    
    # test -d doppelttmp && rm -r doppelttmp
    
    echo "hier ist das Script zu ende. Das ist eine sehr sinnvolle Mitteilung ;-)"
    exit 0
    
    #-----ERRORCODES-----
    #1 -- CTRL + C abbruch 
    p.s. die Fragezeichen habe ich gelöscht, siehe Änderungsbegründung oben
     
  10. #9 BloodyMary, 08.03.2008
    BloodyMary

    BloodyMary Pornophon

    Dabei seit:
    15.03.2005
    Beiträge:
    615
    Zustimmungen:
    1
    Ort:
    Bayern
    hmm ich fand die fragezeichen recht sinnvoll, damit man erkennt wo das Problem liegt?
    Was ist nur los im UB? Es ist echt traurig das ständig irgendwelche Diskussionen in persönlichen beleidigungen enden!

    Wenn man einen Befehl nicht kennt, kann man auch nicht die man-Pages dazu lesen
     
  11. Anzeige

    Vielleicht findest du HIER Antworten.
    Registrieren bzw. einloggen, um diese und auch andere Anzeigen zu deaktivieren
  12. #10 Gott_in_schwarz, 08.03.2008
    Gott_in_schwarz

    Gott_in_schwarz ar0

    Dabei seit:
    22.04.2007
    Beiträge:
    546
    Zustimmungen:
    0
    Ort:
    Niedersachsen
    also erstmal:
    Code:
    if [ -z "$verz" ] ; then
        class=`groups`
        user=`whoami`
        echo "Suchen nach Dateien in /users/class/$class/$user..."
        find /users/class/"$class"/"$user" -exec md5sum {} \; > doppelttmp/sum.loesch
    else
        echo "Suchen nach Dateien in $verz..."
        find "$verz" -exec md5sum {} \; > doppelttmp/sum.loesch
    fi
    diese if-verzweigung, die btw zweimal im skript vorkommt, kannst du dir sparen...
    (ich nehme mal stark an, dass du noch nichtmal einen ordner /users/class hast.. könnte mich natürlich irren.) und wie folgt zusammen schrumpfen:
    Code:
        echo "Suchen nach Dateien in $verz..."
        find "$verz" -exec md5sum {} \; > doppelttmp/sum.loesch
    und die doppelte verzeichnisabfrage ist IMHO auch nicht der gipfel der sinnhaftigkeit. damit könntest du übergeordnete ordner beschützen, aber (zumindest in der jetzigen form) nicht untergeordnete, weil find rekursiv arbeitet. (es sei denn, man verbietet es "ihm"..)
    dann weiter im text:
    Code:
    uniq -w 32 < sum.sorted > keep.lst
    gibt dir doppelte (und dreifache etc.) einträge jeweils nur einmal aus. triviales beispiel: (\n bedeutet "neue zeile")
    Code:
    echo -ne "bla\nbla\nbla\nblub\nblub\n"|uniq
    gibt zum beispiel jeweils einmal bla und einmal blub aus. mit dieser keep.lst könntest du dann zum beispiel so die doppelten dateien mit hilfe der originalen "sum.sorted" liste löschen:
    Code:
    grep -vFf keep.lst sum.sorted
    gibt also alle löschkandidaten mit md5sum aus, durch awk gepipet könnte man das dann bereits löschen:
    Code:
    for badFile in $(grep -vFf keep.lst sum.sorted|awk '{print $2}'); do
       echo "$badFile"
    done
    wobei du dann das echo durch rm ersetzen müsstest. außerdem habe ich den pfad "doppelttmp" weggelassen... aber ganz ehrlich: ich würde mein home-verzeichnis diesem zusammengeprügelten skript nicht anvertrauen, nimm lieber fdupes, oder nimm wenigstens "rm -i" oder so.. (wo sich dann wieder die frage stellt, ob das dann noch so die große hilfe ist, wenn man zu allem ja und amen sagen muss)



    und zu guter letzt @ worker: lass es doch einfach sein.
    hattest recht, es waren eigentlich nur 38 fragezeichen. wc -c hat auch das newline zeichen mitgezählt. und der satz von mir "schreib du bitte richtig deutsch" ist ein link, der dich auf eine von dir perpetuierte typographische unsitte des internets aufmerksam machen sollte, also einfach mal klicken und überraschen lassen..
    gute nacht.

    ich bin offiziell aus diesem thread draußen.
     
  13. worker

    worker König

    Dabei seit:
    29.03.2007
    Beiträge:
    848
    Zustimmungen:
    0
    Schon ... deshalb geht jetzt alles Weitere per PN.
     
Thema: Doppelte Dateien finden und löschen
Besucher kamen mit folgenden Suchen
  1. doppelte dateien finden mit prüfsumme linux

    ,
  2. FreeBSD Programm doppelte Dateien

    ,
  3. linux doppelte dateien finden script

    ,
  4. bash doppelte dateien,
  5. linux duplikate finden,
  6. bin bash doppelte dateien
Die Seite wird geladen...

Doppelte Dateien finden und löschen - Ähnliche Themen

  1. skript zum löschen doppelter dateien

    skript zum löschen doppelter dateien: Hallo, ich wollte mir ein Skript schreiben, das doppelte Dateien (gleicher Name) aus einem 2. Ordner löscht/verschiebt. Habe es jetzt soweit:...
  2. Dateien von Linux nach Win verschieben und doppelte Dateien automatisch umbenennen.

    Dateien von Linux nach Win verschieben und doppelte Dateien automatisch umbenennen.: Also unter Linux können Namen von Dateien Zeichen in gross oder Kleinschrift haben und werden dennoch als unterschiedliche Dateien erkannt. Unter...
  3. Linux doppelte Dateien löschen

    Linux doppelte Dateien löschen: Hallo zusammen, Wie kann ich mit einem Script im Linux alle Dateien ausser die neuste in einem Ordner (/home/raphi/Documents) mit der Endung...
  4. Doppelte Dateien löschen.

    Doppelte Dateien löschen.: Hallo, ich habe versucht ein Shell Script zu schreiben, das mir mit Hilfe von fdupes; doppelte Dateien löscht. Ich benutze die Bash und Ubuntu...
  5. Doppelte Dateien löschen

    Doppelte Dateien löschen: Hallo, mit Hilfe eines Scriptes, das ich im Netz gefunden habe und im /home Verzeichniss des Servers ablaufen lasse, werden alle doppelten...
Status des Themas:
Es sind keine weiteren Antworten möglich.