4 Stimmen

Überprüfung von Duplikaten im Terminal?

Der folgende Code gibt mir eine lange Liste von Dateien mit Hashes und Dateinamen aus

md5sum *.java

Ich habe erfolglos versucht, die Zeilen aufzulisten, in denen identische Hashes vorkommen, so dass ich dann identische Dateien entfernen kann.

Wie kann man identische Dateien mit gleichem Inhalt filtern und löschen?

5voto

fdupes und weniger Blick auf Duplikate

Verwenden Sie fdupes das ein Kommandozeilenprogramm ist wie

fdupes -r /home/masi/Documents/ > /tmp/1 
less -M +Gg /tmp/1

das alle Duplikate findet und sie in der Datei temp speichert. Der less-Befehl zeigt Ihnen die Zeilenposition aller Zeilen und Ihr Vorgehen in Prozent an. Ich fand fdupes hieraus Antwort und sein klarer Wikipedia-Artikel ici . Sie können es per Homebrew unter OSX und per apt-get unter Linux.

Verwenden Sie fdupes interaktiv mit möglichen Löschungen

Laufen lassen

fdupes -rd /home/masi/Documents

mit dem Sie wählen können, welche Kopie Sie löschen wollen oder nicht, Beispielansicht der interaktiven Arbeit:

Set 4 of 2664, preserve files [1 - 2, all]: all

   [+] /home/masi/Documents/Exercise 10 - 1.4.2015/task.bib
   [+] /home/masi/Documents/Exercise 9 - 16.3.2015/task.bib

[1] /home/masi/Documents/Celiac_disease/jcom_jun02_celiac.pdf
[2] /home/masi/Documents/turnerWhite/jcom_jun02_celiac.pdf

Set 5 of 2664, preserve files [1 - 2, all]: 2

   [-] /home/masi/Documents/Celiac_disease/jcom_jun02_celiac.pdf
   [+] /home/masi/Documents/turnerWhite/jcom_jun02_celiac.pdf

wo Sie sehen, dass ich 2664 Duplikate habe. Es wäre schön, eine statische Datei zu haben, in der die Einstellungen zu den gewünschten Duplikaten gespeichert werden; ich habe dazu einen Thread eröffnet ici . Ich habe zum Beispiel dieselben Bib-Dateien in einigen Übungen und Hausaufgaben, so dass ich nicht ein zweites Mal fragen muss, wenn der Benutzer ein Duplikat haben möchte.

3voto

schnaader Punkte 47961

Das sollte funktionieren:

md5sum *.java | sort | uniq -d -w32

Damit wird uniq angewiesen, nur die ersten 32 Zeichen zu vergleichen, also nur die md5-Summe, nicht die Dateinamen.

EDIT: Wenn -w nicht verfügbar ist, versuchen Sie es:

md5sum *.java | awk '{print $1}' | sort | uniq -d

Der Nachteil ist, dass Sie nicht wissen, welche Dateien diese doppelten Prüfsummen haben... wie auch immer, wenn es nicht zu viele Prüfsummen gibt, können Sie

md5sum *.java | grep 0bee89b07a248e27c83fc3d5951213c1

um anschließend die Dateinamen zu erhalten (die obige Prüfsumme ist nur ein Beispiel). Ich bin sicher, dass es auch eine Möglichkeit gibt, all dies in einem Shell-Skript zu tun.

2voto

Zsolt Botykai Punkte 48177

Noch besser:

md5sum *.java | sort | uniq -d

Dadurch werden nur die doppelten Zeilen gedruckt.

1voto

hornlo Punkte 11

Damit werden alle Dateien aufgelistet, wobei zwischen den Duplikaten eine Leerzeile eingefügt wird:

$ md5sum *.txt \ 
  | sort       \
  | perl -pe '($y)=split; print "\n" unless $y eq $x; $x=$y'

05aa3dad11b2d97568bc506a7080d4a3  b.txt
2a517c8a78f1e1582b4ce25e6a8e4953  n.txt
e1254aebddc54f1cbc9ed2eacce91f28  a.txt
e1254aebddc54f1cbc9ed2eacce91f28  k.txt
e1254aebddc54f1cbc9ed2eacce91f28  p.txt
$

Nur 1. jeder Gruppe drucken:

$ md5sum *.txt | sort | perl -ne '($y,$f)=split; print "$f\n" unless $y eq $x; $x=$y'
b.txt
n.txt
a.txt
$ 

wenn Sie mutig sind, ändern Sie das "unless" in "if" und dann

$ rm `md5sum ...`

um alle Gruppen außer der ersten zu löschen

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X