Wie ersetze ich alle doppelten Dateien durch Hardlinks?

Wie ersetze ich alle doppelten Dateien durch Hardlinks?

Ich habe zwei Ordner mit verschiedenen Dateien. Von einigen Dateien aus dem ersten Ordner gibt es eine exakte Kopie im zweiten Ordner. Diese möchte ich durch einen Hardlink ersetzen. Wie mache ich das?

Antwort1

Ich kenne 4 Befehlszeilenlösungen für Linux. rdfindAufgrund der vielen verfügbaren Optionen ist die letzte hier aufgeführte meine bevorzugte.

Abonnieren

  • Dies scheint das am meisten empfohlene/bekannteste zu sein.
  • Es ist am einfachsten zu verwenden, seine einzige Aktion besteht jedoch darin, Duplikate zu löschen.
  • Um sicherzustellen, dass es sich bei Duplikaten tatsächlich um Duplikate handelt (und die Ausführung nicht ewig dauert), werden Dateivergleiche zunächst nach Dateigröße, dann nach MD5-Hash und schließlich nach Byte-für-Byte-Vergleichen durchgeführt.

Beispielausgabe (mit den Optionen „Größe anzeigen“, „rekursiv“):

$ fdupes -Sr .
17 bytes each:                          
./Dir1/Some File
./Dir2/SomeFile

fester Link

  • Entwickelt, um, wie der Name schon sagt, gefundene Dateien durch Hardlinks zu ersetzen.
  • Hat eine --dry-runOption.
  • Gibt nicht an, wie Inhalte verglichen werden, berücksichtigt aber im Gegensatz zu allen anderen Optionen den Dateimodus, den Besitzer und die Änderungszeit.

Beispielausgabe (beachten Sie, dass meine beiden Dateien leicht unterschiedliche Änderungszeiten haben, deshalb weise ich das beim zweiten Durchlauf an, das zu ignorieren):

$ stat Dir*/* | grep Modify
Modify: 2015-09-06 23:51:38.784637949 -0500
Modify: 2015-09-06 23:51:47.488638188 -0500

$ hardlink --dry-run -v .
Mode:     dry-run
Files:    5
Linked:   0 files
Compared: 0 files
Saved:    0 bytes
Duration: 0.00 seconds

$ hardlink --dry-run -v -t .
[DryRun] Linking ./Dir2/SomeFile to ./Dir1/Some File (-17 bytes)
Mode:     dry-run
Files:    5
Linked:   1 files
Compared: 1 files
Saved:    17 bytes
Duration: 0.00 seconds

dumm

  • Wird zum Suchen von Dateien verwendet, auf die der Benutzer dann Aktionen ausführt. Es sind keine Aktionen verfügbar.
  • Vergleiche werden nach Dateigröße und dann nach SHA1-Hash durchgeführt.
    • Hash kann in SHA256, SHA384 oder SHA512 geändert werden.
    • Hash kann deaktiviert werden, um einen Byte-für-Byte-Vergleich durchzuführen

Beispielausgabe (mit Option „rekursiv“):

$ duff -r .
2 files in cluster 1 (17 bytes, digest 34e744e5268c613316756c679143890df3675cbb)
./Dir2/SomeFile
./Dir1/Some File

rdfind

  • Optionen haben eine ungewöhnliche Syntax (sollten sie nachahmen find?).
  • Mehrere Optionen für Aktionen bei doppelten Dateien (Löschen, symbolische Links erstellen, Hardlinks erstellen).
  • Verfügt über einen Probelaufmodus.
  • Vergleiche werden nach Dateigröße durchgeführt, dann nach ersten Bytes, dann nach letzten Bytes, dann entweder MD5 (Standard) oder SHA1.
  • Durch die Rangfolge der gefundenen Dateien ist vorhersehbar, welche Datei als Original angesehen wird.

Beispielausgabe:

$ rdfind -dryrun true -makehardlinks true .
(DRYRUN MODE) Now scanning ".", found 5 files.
(DRYRUN MODE) Now have 5 files in total.
(DRYRUN MODE) Removed 0 files due to nonunique device and inode.
(DRYRUN MODE) Now removing files with zero size from list...removed 0 files
(DRYRUN MODE) Total size is 13341 bytes or 13 kib
(DRYRUN MODE) Now sorting on size:removed 3 files due to unique sizes from list.2 files left.
(DRYRUN MODE) Now eliminating candidates based on first bytes:removed 0 files from list.2 files left.
(DRYRUN MODE) Now eliminating candidates based on last bytes:removed 0 files from list.2 files left.
(DRYRUN MODE) Now eliminating candidates based on md5 checksum:removed 0 files from list.2 files left.
(DRYRUN MODE) It seems like you have 2 files that are not unique
(DRYRUN MODE) Totally, 17 b can be reduced.
(DRYRUN MODE) Now making results file results.txt
(DRYRUN MODE) Now making hard links.
hardlink ./Dir1/Some File to ./Dir2/SomeFile
Making 1 links.

$ cat results.txt 
# Automatically generated
# duptype id depth size device inode priority name
DUPTYPE_FIRST_OCCURRENCE 1 1 17 2055 24916405 1 ./Dir2/SomeFile
DUPTYPE_WITHIN_SAME_TREE -1 1 17 2055 24916406 1 ./Dir1/Some File
# end of file

Antwort2

Ich empfehle sehrAbonnieren. Es ist ein erweiterter Fork vonAbonnieren, umfasst aber auch:

  • eine Reihe neuer Befehlszeilenoptionen – darunter--linkhard, oder-Lfür kurz
  • native Unterstützung für alle wichtigen Betriebssystemplattformen
  • Die Geschwindigkeit soll im Durchschnitt über 7-mal schneller sein als bei fdupes

Für Ihre Frage können Sie einfach ausführen$ jdupes -L /path/to/your/files.

Sie können die neueste Quelle klonen und daraus erstellen.GitHub-Repositoryda sich das Projekt noch in der aktiven Entwicklung befindet. Windows-Binärdateienwerden auch hier bereitgestellt. Verpackte Binärdateien sind in einigen Linux-/BSD-Distributionen verfügbar – eigentlich habe ich sie zuerst über gefunden $ apt search.

Antwort3

Duplikat des Kommandantenist eine mögliche Lösung unter Windows:

Duplicate Commander ist eine Freeware-Anwendung, mit der Sie doppelte Dateien auf Ihrem PC finden und verwalten können. Duplicate Commander verfügt über viele Funktionen und Tools, mit denen Sie Ihren Speicherplatz von diesen Duplikaten wiederherstellen können.

Merkmale:

Replacing files with hard links
Replacing files with soft links
... (and many more) ...

1

Für Linux finden Sie ein Bash-SkriptHier.

Antwort4

Auf meinem Computer hatte ich ein praktisches kostenloses Tool namens Link Shell Extension. Es war nicht nur großartig, um Hardlinks und symbolische Links, sondern auch Junctions zu erstellen! Darüber hinaus wurden benutzerdefinierte Symbole hinzugefügt, mit denen Sie verschiedene Linktypen leicht identifizieren können, sogar solche, die bereits vor der Installation vorhanden waren. Rote Pfeile stehen beispielsweise für Hardlinks, während grüne für symbolische Links stehen ... und Ketten für Junctions.

Leider habe ich die Software vor einiger Zeit deinstalliert (im Rahmen einer Massendeinstallation verschiedener Programme), sodass ich keine Links mehr manuell erstellen kann, die Symbole jedoch immer noch automatisch angezeigt werden, wenn Windows einen Hard-, Symbolic- oder Junction-Link erkennt.

verwandte Informationen