Gibt es ein Programm, dass von einer spezifische Auswahl an Dateien die doppelten Dateien in anderen Ordnern findet?

Du suchst ein Programm für einen bestimmten Zweck?
Antworten
Cordess
Beiträge: 422
Registriert: 09.01.2006 00:37:22

Gibt es ein Programm, dass von einer spezifische Auswahl an Dateien die doppelten Dateien in anderen Ordnern findet?

Beitrag von Cordess » 05.03.2022 02:00:28

Gibt es ein Programm, dass von einer spezifischen Auswahl an Dateien die doppelten Dateien in anderen Ordnern findet?

Nehmen wir mal an, ich habe ein Verzeichnis mit den Dateien a, b und c und nun möchte ich Prüfsummen identische Dateien dieser 3 Dateien unter Angabe eines Suchordners, in dem gesucht werden soll finden.

Ich weiß, dass man mit fdupes und rdfind doppelte Dateien finden kann, aber bei diesen beiden Tools kann man leider nicht spezifisch vorgeben, von welchen Dateien die doppelten Dateien und deren Ort gefunden werden sollen.
fdupes und rdfind zeigt mir einfach jede Datei in den angegebenen Ordnern an, die doppelt vorkommen.
Das ist aber nicht das, was ich suche.
Ich möchte dass nur nach a, b und c gesucht wird und mir dann die Ordner aufgelistet werden, in denen die vorkommen und prüfsummentechnisch identisch sind.

Normalerweise würde man jetzt find nehmen, aber der Dateiname dieser 3 Dateien ist so generisch, dass er öfters vorkommt.
Ich muss also auch gleich die Prüfsummen überprüfen.

Wie kann man das realisieren?

thinkofant
Beiträge: 87
Registriert: 06.11.2021 21:56:52

Re: Gibt es ein Programm, dass von einer spezifische Auswahl an Dateien die doppelten Dateien in anderen Ordnern findet?

Beitrag von thinkofant » 05.03.2022 08:24:11

Hallo :)

Caveat: Mir fehlt die konkrete Erfahrung mangels eigener Anwendung! Aber tut Debianrmlint vielleicht was du wünschst?
Doku: https://rmlint.readthedocs.io/en/latest ... nput-files

Grüße
tof
Signaturen sind wie frische Pilze, denn frische Pilze..... :idea:

Cordess
Beiträge: 422
Registriert: 09.01.2006 00:37:22

Re: Gibt es ein Programm, dass von einer spezifische Auswahl an Dateien die doppelten Dateien in anderen Ordnern findet?

Beitrag von Cordess » 05.03.2022 18:47:34

Ich habe das Tool, das du vorgeschlagen hast mal installiert und mir die man page angeschaut. Es scheint aber nicht das zu können, was ich brauche. Es gibt bspw. keine Möglichkeit eine bestimme Datei anzugeben, nach der dann die doppelten gesucht werden sollen.

JTH
Moderator
Beiträge: 3023
Registriert: 13.08.2008 17:01:41
Wohnort: Berlin

Re: Gibt es ein Programm, dass von einer spezifische Auswahl an Dateien die doppelten Dateien in anderen Ordnern findet?

Beitrag von JTH » 05.03.2022 19:03:57

Was du suchst wäre in etwa so etwas:

Code: Alles auswählen

find /ein/order/zum/durchsuchen -type f -exec md5sum {} + | grep ^md5sum_von_datei_a
Das könnte man sich in einem kleinen Skript noch komfortabler gestalten und für mehrere Originaldateien erweitern.

Nachtrag:
Oder es geht vielleicht tatsächlich mit rmlint, mit einem "original directory":

Code: Alles auswählen

rmlint /ordner/mit/duplikaten // /ordner/mit/a_b_c
Ungetestet.
Manchmal bekannt als Just (another) Terminal Hacker.

Cordess
Beiträge: 422
Registriert: 09.01.2006 00:37:22

Re: Gibt es ein Programm, dass von einer spezifische Auswahl an Dateien die doppelten Dateien in anderen Ordnern findet?

Beitrag von Cordess » 05.03.2022 19:38:28

JTH hat geschrieben: ↑ zum Beitrag ↑
05.03.2022 19:03:57
Was du suchst wäre in etwa so etwas:

Code: Alles auswählen

find /ein/order/zum/durchsuchen -type f -exec md5sum {} + | grep ^md5sum_von_datei_a
Das könnte man sich in einem kleinen Skript noch komfortabler gestalten und für mehrere Originaldateien erweitern.
Ja, das dürfte gehen, ist dann aber doch eine Brute Force Methode.
Wenn man da mehrere große Dateien im Ordner hat, wird von denen alle die Prüfsumme gebildet.

Ich denke, wenn man die Dateien zuerst nach Dateigröße filtert und dann erst die Prüfsummen erstellt und vergleicht, dürfte das schneller gehen.
Nachtrag:
Oder es geht vielleicht tatsächlich mit rmlint, mit einem "original directory":

Code: Alles auswählen

rmlint /ordner/mit/duplikaten // /ordner/mit/a_b_c
Ungetestet.
Hm, ich glaube nicht.

JTH
Moderator
Beiträge: 3023
Registriert: 13.08.2008 17:01:41
Wohnort: Berlin

Re: Gibt es ein Programm, dass von einer spezifische Auswahl an Dateien die doppelten Dateien in anderen Ordnern findet?

Beitrag von JTH » 05.03.2022 20:28:55

Cordess hat geschrieben: ↑ zum Beitrag ↑
05.03.2022 19:38:28
Hm, ich glaube nicht.
Mal ausprobiert?

Schnell zusammengebastelt, sieht mir das so aus, wie ich zumindest das von dir gesuchte verstanden hab:

Code: Alles auswählen

$ rmlint -o pretty:stdout dup // orig

# Duplicate(s):
    ls '/tmp/tmp.t9ethVQfOO/orig/a'
    rm '/tmp/tmp.t9ethVQfOO/dup/a'
    rm '/tmp/tmp.t9ethVQfOO/dup/aa'
    ls '/tmp/tmp.t9ethVQfOO/orig/b'
    rm '/tmp/tmp.t9ethVQfOO/dup/b'
    rm '/tmp/tmp.t9ethVQfOO/dup/bb'
    ls '/tmp/tmp.t9ethVQfOO/orig/c'
    rm '/tmp/tmp.t9ethVQfOO/dup/c'
    rm '/tmp/tmp.t9ethVQfOO/dup/cc'
Die ls-ten Dateien sind die Originale, die zum Löschen vorgeschlagenen deren Kopien. In dup/ liegen auch noch andere, hier dann einfach nicht aufgeführte Dateien.
Manchmal bekannt als Just (another) Terminal Hacker.

Cordess
Beiträge: 422
Registriert: 09.01.2006 00:37:22

Re: Gibt es ein Programm, dass von einer spezifische Auswahl an Dateien die doppelten Dateien in anderen Ordnern findet?

Beitrag von Cordess » 07.03.2022 19:22:33

JTH hat geschrieben: ↑ zum Beitrag ↑
05.03.2022 20:28:55
Cordess hat geschrieben: ↑ zum Beitrag ↑
05.03.2022 19:38:28
Hm, ich glaube nicht.
Mal ausprobiert?
Bei der Parameterübergabe fehlt die Angabe der Datei, deren doppelte Dateien gesucht werden sollen.
Schnell zusammengebastelt, sieht mir das so aus, wie ich zumindest das von dir gesuchte verstanden hab:

Code: Alles auswählen

$ rmlint -o pretty:stdout dup // orig

# Duplicate(s):
    ls '/tmp/tmp.t9ethVQfOO/orig/a'
    rm '/tmp/tmp.t9ethVQfOO/dup/a'
    rm '/tmp/tmp.t9ethVQfOO/dup/aa'
    ls '/tmp/tmp.t9ethVQfOO/orig/b'
    rm '/tmp/tmp.t9ethVQfOO/dup/b'
    rm '/tmp/tmp.t9ethVQfOO/dup/bb'
    ls '/tmp/tmp.t9ethVQfOO/orig/c'
    rm '/tmp/tmp.t9ethVQfOO/dup/c'
    rm '/tmp/tmp.t9ethVQfOO/dup/cc'
Die ls-ten Dateien sind die Originale, die zum Löschen vorgeschlagenen deren Kopien. In dup/ liegen auch noch andere, hier dann einfach nicht aufgeführte Dateien.
Damit kriegst du generell alles, was in diesen beiden Verzeichnissen an doppelten Dateien vorhanden ist. Das ist aber nicht das Gesuchte.

Beispiel:

Code: Alles auswählen

rmlint -o pretty:stdout b // a

# Duplikate:
    ls '/tmp/test/dup/a/r1.txt'
    rm '/tmp/test/dup/b/r2.txt'
    ls '/tmp/test/dup/b/z1.txt'
    rm '/tmp/test/dup/b/z2.txt'

Die Dateien a/r1.txt und b/r2.txt sind in meinem Beispiel identisch und deren Duplikat wird dann auch im b Ordner gefunden und zur Löschung vorgeschlagen, sofern a der Ordner sein soll, dessen Duplikate gefunden werden sollen und dessen "Originale" erhalten bleiben sollen. Soweit so gut.

Aber b/z1.txt und b/z2.txt sind zwar identisch, aber im Ordner a gar nicht vorhanden. D.h. die sollten gar nicht zur Löschung vorgeschlagen werden, denn die Aufgabenstellung ist ja, suche nur die Duplikate die ich konkret benenne oder die in einem Verzeichnis liegen, das ich konkret benenne.

Und fdupes macht es leider genauso schlecht. Auch das schlägt z1.txt und z2.txt zur Löschung vor.

Code: Alles auswählen

fdupes -r a b
b/z1.txt                              
b/z2.txt

a/r1.txt
b/r2.txt
Das ist okay, wenn man überall doppelte Einträge löschen möchte, aber manchmal ist das keine Option.

Manche alten Webseiten nutzen bspw, immer noch 1 Pixeldateien zur Layoutdefinition. Hat man ein paar alte Artikel gespeichert, dann hat man auch viele solcher 1 Pixeldateien im Verzeichnis herumliegen, die sollen aber nicht gelöscht werden, da sie für die einzelnen Artikel ja notwendig sind.
Bei fdupes kann man zwar eine Mindestgröße angeben, aber auch das ist nicht in jedem Fall zielführend, denn das mit den 1 Pixeldateien ist nur ein Beispiel, es gibt auch andere. Z.B. bei Programmcode, wenn man eine Lib in mehreren Projektordner hat. Die will man auch nicht löschen, eine lib kann aber auch größer sein, als die Dateien, deren Duplikate man gezielt löschen möchte.

Deswegen bräuchte ich schon eine gezielte Suche nach doppelten Dateien inkl. Angabe der Dateien nach denen überhaupt gesucht werden soll und ich vorher festlegen kann. Dein find Beispiel war da schon besser.

Benutzeravatar
Blackbox
Beiträge: 4289
Registriert: 17.09.2008 17:01:20
Lizenz eigener Beiträge: GNU Free Documentation License

Re: Gibt es ein Programm, dass von einer spezifische Auswahl an Dateien die doppelten Dateien in anderen Ordnern findet?

Beitrag von Blackbox » 07.03.2022 19:44:16

Eine Weiterentwicklung bzw. ein Fork von Debianfdupes ist Debianjdupes.

Ein weiterer Kandidat wäre Debianrdfind.
Eigenbau PC: Debian Sid - Kernel: 6.5.13 - Xfce 4.18 mit sway
Desktop PC: Dell Inspiron 530 - Debian Sid - Kernel: 6.5.13 - Xfce 4.18 mit sway
Notebook: TUXEDO BU1406 - Debian Sid - Kernel: 6.5.13 - Xfce 4.18 mit sway
Alles Minimalinstallationen und ohne sudo/PA/PW.
Rootserver: Rocky Linux 9.3 - Kernel: 5.14

Freie Software unterstützen, Grundrechte stärken!

JTH
Moderator
Beiträge: 3023
Registriert: 13.08.2008 17:01:41
Wohnort: Berlin

Re: Gibt es ein Programm, dass von einer spezifische Auswahl an Dateien die doppelten Dateien in anderen Ordnern findet?

Beitrag von JTH » 07.03.2022 20:36:16

Cordess hat geschrieben: ↑ zum Beitrag ↑
07.03.2022 19:22:33
Aber b/z1.txt und b/z2.txt sind zwar identisch, aber im Ordner a gar nicht vorhanden. D.h. die sollten gar nicht zur Löschung vorgeschlagen werden, denn die Aufgabenstellung ist ja, suche nur die Duplikate die ich konkret benenne oder die in einem Verzeichnis liegen, das ich konkret benenne.
Dafür gibts anscheinend die Option --must-match-tagged, kurz -m:

Ohne:

Code: Alles auswählen

$ rmlint -o pretty:stdout dup // orig                                                                              
                                                                                                                                                      
# Duplicate(s):                                                                                                                                       
    ls '/tmp/tmp.zvu1rBkxDm/orig/a'                                                                                                                   
    rm '/tmp/tmp.zvu1rBkxDm/dup/a'                                                                                                                    
    ls '/tmp/tmp.zvu1rBkxDm/dup/c'                                                                                                                    
    rm '/tmp/tmp.zvu1rBkxDm/dup/cc'                                                                                                                   
    ls '/tmp/tmp.zvu1rBkxDm/orig/b'                                                                                                                   
    rm '/tmp/tmp.zvu1rBkxDm/dup/b'

Mit:

Code: Alles auswählen

$ rmlint -m -o pretty:stdout dup // orig                                                                           
                                                                                                                                                      
# Duplicate(s):                                                                                                                                       
    ls '/tmp/tmp.zvu1rBkxDm/orig/a'                                                                                                                   
    rm '/tmp/tmp.zvu1rBkxDm/dup/a'                                                                                                                    
    ls '/tmp/tmp.zvu1rBkxDm/orig/b'                                                                                                                   
    rm '/tmp/tmp.zvu1rBkxDm/dup/b'
Manchmal bekannt als Just (another) Terminal Hacker.

Christoph Franzen
Beiträge: 195
Registriert: 22.08.2005 19:58:49
Lizenz eigener Beiträge: Artistic Lizenz
Wohnort: Aachen

Re: Gibt es ein Programm, dass von einer spezifische Auswahl an Dateien die doppelten Dateien in anderen Ordnern findet?

Beitrag von Christoph Franzen » 10.03.2022 12:17:45

Hallo zusammen,
thinkofant hat geschrieben: ↑ zum Beitrag ↑
05.03.2022 08:24:11
Debianrmlint
kannte ich noch nicht, diese bestimmte Eigenschaft, daß nicht interaktiv oder „willkürlich“ entschieden wird, welche Datei das „Original“ ist, habe ich bei allen Linux-Programmen, die ich zu dem Zweck gefunden habe, stets vermißt.
Da ich oft sowas brauche (entweder zum Löschen von mehrfach vorhandenen Daten, oder zumindest um Platz zu sparen und die nur ein Mal zu speichern), habe ich einige ausprobiert und festgestellt, daß man je nach konkretem Einsatzzweck mal das eine oder das andere besser brauchen kann, daher zähle ich sie mal auf:
  • dupemap (aus Debianmagicrescue)
  • Duplicate Files Finder (dupf & dupfgui)
  • Debianduff
  • Debianfdupes
  • Debianrdfind
  • dupfiles
  • pmatch von Tomasz Muras (ursprünglich auf Rubyforge und war wohl mal in Debian) ist nirgendwo mehr zu finden, hat aber ein paar nette Möglichkeiten:
    -s, --secondary-choice x,y,z Which files should I prefer? Possible values: short, long, deep, shallow, dirfull, dirempty, random
  • freedup
Die folgenden können nicht löschen, sind aber dennoch praktisch, um Verzeichnisbäume zu „komprimieren“, in denen man zwar mehrfache Namen, aber den Inhalt nur ein Mal haben möchte:Die Anforderung, daß ein bestimmter Satz an Dateien nicht „angefaßt“ wird, hatte ich bisher nur bei einem Windows-Programm erfüllt gefunden, nicht quelloffen, aber zumindest freibiermäßig: Clonespy, das sehr gut unter Wine läuft. Das Schöne daran ist, daß es eigens zu dem Zweck gemacht ist, die Dateien in zwei „Pools“ zu schaufeln, wo man dann aus dem einen alles weglöschen lassen kann, was bereits im anderen vorhanden ist, ohne daß auch dort noch doppelt vorhandenes entfernt würde. Das Programm hat inzwischen haufenweise Einstellmöglichkeiten, daher verwende ich es trotzdem; manche sind natürlich unter Linux mäßig sinnvoll (keine *.dll wegmachen, ist aber suchmustermäßig konfigurierbar; Schreibschutz entfernen und trotzdem löschen darf man nicht unbedingt [das Problem hat man aber auf NTFS unter dem System, für das es gedacht ist, auch]).
Worauf man bei alledem achten sollte: das Windows-Programm kann zwar „Reparse Points“ erkennen (also bestimmte Windows-Verknüpfungen), dies schlägt aber unter Wine meist fehl so daß symbolischen Verknüpfungen gefolgt wird. „mount --bind“ ist natürlich erst recht betroffen, das ist auch für die ganzen Linux-Programme vollkommen „transparent“, gefundene Dateien können also nicht als identisch und nur ein Mal vorhanden erkannt werden.
Christoph

Cordess
Beiträge: 422
Registriert: 09.01.2006 00:37:22

Re: Gibt es ein Programm, dass von einer spezifische Auswahl an Dateien die doppelten Dateien in anderen Ordnern findet?

Beitrag von Cordess » 15.03.2022 15:13:19

Danke für eure Antworten.

Ich werde das alles mal bei nächster Gelegenheit ausprobieren.
Momentan komme ich nicht dazu.

Antworten