Detaillierte Erklärung zur Identifizierung von Dateien mit gleichem Inhalt unter Linux

Detaillierte Erklärung zur Identifizierung von Dateien mit gleichem Inhalt unter Linux

Vorwort

Manchmal stellen Dateikopien eine enorme Verschwendung von Festplattenspeicher dar und können zu Verwirrung führen, wenn Sie eine Datei aktualisieren möchten. Hier sind sechs Befehle zum Identifizieren dieser Dateien.

In einem kürzlich erschienenen Beitrag haben wir uns damit beschäftigt, wie man Dateien identifiziert und lokalisiert, die fest verknüpft sind (d. h. auf denselben Festplatteninhalt verweisen und einen Inode gemeinsam nutzen). In diesem Artikel sehen wir uns Befehle an, die Dateien mit demselben Inhalt finden können, die aber nicht miteinander verknüpft sind.

Hardlinks sind nützlich, da sie die Speicherung von Dateien an mehreren Stellen im Dateisystem ermöglichen, ohne zusätzlichen Festplattenspeicher zu beanspruchen. Andererseits können Dateikopien manchmal eine enorme Verschwendung von Festplattenspeicherplatz darstellen und beim Aktualisieren von Dateien zu Unannehmlichkeiten führen. In diesem Artikel sehen wir uns verschiedene Möglichkeiten zum Identifizieren dieser Dateien an.

Vergleichen von Dateien mit dem Diff-Befehl

Der wahrscheinlich einfachste Weg, zwei Dateien zu vergleichen, ist die Verwendung des Befehls „diff“. Die Ausgabe zeigt die Unterschiede zwischen Ihren Dateien. Die Symbole < und > geben an, ob in der ersten ( < ) oder zweiten ( > ) Datei zusätzliche Textzeilen vorhanden sind, die als Argumente übergeben werden. In diesem Beispiel gibt es zusätzliche Textzeilen in backup.html.

$ diff index.html Sicherung.html
2438a2439,2441
> <vor>
> Das ist alles, was es zu berichten gibt.
> </pre>

Wenn diff keine Ausgabe liefert, sind die beiden Dateien identisch.

$ diff Startseite.html Index.html
$

Der einzige Nachteil von diff ist, dass es nur zwei Dateien gleichzeitig vergleichen kann und Sie die zu vergleichenden Dateien angeben müssen. Einige der Befehle in diesem Beitrag können mehrere doppelte Dateien für Sie finden.

Verwenden von Prüfsummen

Der Befehl cksum (Prüfsumme) berechnet die Prüfsumme einer Datei. Eine Prüfsumme ist eine mathematische Vereinfachung, die Textinhalte in eine lange Zahl umwandelt (z. B. 2819078353 228029). Obwohl Prüfsummen nicht völlig eindeutig sind, ist die Wahrscheinlichkeit, dass Dateien mit unterschiedlichem Inhalt die gleiche Prüfsumme aufweisen, äußerst gering.

$ cksum *.html
2819078353 228029 Backup.html
4073570409 227985 home.html
4073570409 227985 index.html

Im obigen Beispiel können Sie sehen, dass davon ausgegangen werden kann, dass die zweite und dritte Datei, die die gleiche Prüfsumme erzeugen, identisch sind.

Verwenden des Find-Befehls

Obwohl der Befehl „Find“ keine Option zum Suchen nach doppelten Dateien hat, können Sie damit dennoch Dateien nach Name oder Typ suchen und den Befehl „cksum“ ausführen. Zum Beispiel:

$ find . -name "*.html" -exec cksum {} \;
4073570409 227985 ./home.html
2819078353 228029 ./backup.html
4073570409 227985 ./index.html

Verwenden des Befehls fslint

Der Befehl fslint kann gezielt zum Auffinden doppelter Dateien verwendet werden. Beachten Sie, dass wir ihm eine Startposition zugewiesen haben. Wenn eine große Anzahl von Dateien durchlaufen werden muss, kann dies eine Weile dauern. Beachten Sie, wie doppelte Dateien aufgelistet und nach anderen Problemen wie leeren Verzeichnissen und ungültigen IDs gesucht wird.

$ fslint .
-----------------------------------Dateiname lint
-------------------------------Ungültige UTF-8-Namen
----------------------------------- Aktenkoffer-Fussel
----------------------------------DUPlizieren Sie Dateien <==
Startseite.html
Hauptseite
-------------------------------------------------- Hängende Links
--------------------überflüssige Zeichen in Links
------------------------------------verdächtige Links
--------------------------------Leere Verzeichnisse
./.gnupg
----------------------------------Temporäre Dateien
----------------------Doppelte/widersprüchliche Namen
------------------------------------------Ungültige IDs
-------------------------Nicht entfernte ausführbare Dateien

Möglicherweise müssen Sie fslint auf Ihrem System installieren. Möglicherweise müssen Sie es auch zu Ihrem Befehlssuchpfad hinzufügen:

$ export PATH=$PATH:/usr/share/fslint/fslint

Verwenden des Befehls rdfind

Der Befehl rdfind sucht auch nach doppelten Dateien (mit gleichem Inhalt). Der Name bedeutet „Duplikatsfinder“ und das Programm kann anhand des Dateidatums ermitteln, welche Datei das Original ist. Dies ist nützlich, wenn Sie Kopien löschen möchten, da dadurch die neuere Datei entfernt wird.

$ rdfind ~
Beim Scannen von „/home/shark“ wurden jetzt 12 Dateien gefunden.
Jetzt sind es insgesamt 12 Dateien.
1 Datei aufgrund nicht eindeutigen Geräts und Inodes entfernt.
Die Gesamtgröße beträgt 699498 Bytes oder 683 KiB
9 Dateien aufgrund unterschiedlicher Größen aus der Liste entfernt. 2 Dateien übrig.
Kandidaten werden jetzt auf Basis der ersten Bytes eliminiert: 0 Dateien aus der Liste entfernt. 2 Dateien übrig.
Kandidaten werden jetzt auf Grundlage der letzten Bytes eliminiert: 0 Dateien aus der Liste entfernt. 2 Dateien übrig.
Jetzt werden Kandidaten basierend auf der SHA1-Prüfsumme eliminiert: 0 Dateien aus der Liste entfernt. 2 Dateien übrig.
Es scheint, als hätten Sie 2 Dateien, die nicht eindeutig sind
Insgesamt können 223 KiB eingespart werden.
Jetzt wird die Ergebnisdatei results.txt erstellt

Sie können diesen Befehl im Probelaufmodus ausführen (mit anderen Worten, nur Änderungen melden, die andernfalls vorgenommen werden könnten).

$ rdfind -dryrun true ~
(DRYRUN-MODUS) Beim Scannen von „/home/shark“ wurden derzeit 12 Dateien gefunden.
(DRYRUN-MODUS) Jetzt gibt es insgesamt 12 Dateien.
(DRYRUN-MODUS) 1 Datei aufgrund nicht eindeutigen Geräts und Inodes entfernt.
(DRYRUN MODE) Die Gesamtgröße beträgt 699352 Bytes oder 683 KiB
9 Dateien aufgrund unterschiedlicher Größen aus der Liste entfernt. 2 Dateien übrig.
(DRYRUN-MODUS) Kandidaten werden jetzt basierend auf den ersten Bytes eliminiert: 0 Dateien aus der Liste entfernt. 2 Dateien übrig.
(DRYRUN-MODUS) Kandidaten werden jetzt auf Grundlage der letzten Bytes eliminiert: 0 Dateien aus der Liste entfernt. 2 Dateien übrig.
(DRYRUN-MODUS) Kandidaten werden jetzt basierend auf der SHA1-Prüfsumme eliminiert: 0 Dateien aus der Liste entfernt. 2 Dateien übrig.
(DRYRUN-MODUS) Es scheint, als hätten Sie 2 Dateien, die nicht eindeutig sind
(DRYRUN-MODUS) Insgesamt können 223 KiB reduziert werden.
(DRYRUN-MODUS) Jetzt wird die Ergebnisdatei results.txt erstellt

Der Befehl rdfind bietet auch Funktionen wie das Ignorieren leerer Dateien (-ignoreempty) und das Folgen symbolischer Links (-followsymlinks). Eine Erklärung finden Sie auf der Manpage.

-ignoreempty leere Dateien ignorieren
-minsize ignoriert Dateien, die kleiner als die angegebene Größe sind
-followsymlinks symbolischen Links folgen
-removeidentinode entfernt Dateien, die auf identische Inodes verweisen
-checksum identifiziert den zu verwendenden Prüfsummentyp
-deterministic bestimmt, wie Dateien sortiert werden
-makesymlinks wandelt doppelte Dateien in symbolische Links um
-makehardlinks ersetzt doppelte Dateien durch Hardlinks
-makeresultsfile erstellt eine Ergebnisdatei im aktuellen Verzeichnis
-outputname: Name für die Ergebnisdatei angeben
-deleteduplicates löscht/löst die Verknüpfung doppelter Dateien
-sleep Ruhezeit zwischen dem Lesen von Dateien festlegen (Millisekunden)
-n, -dryrun zeigt an, was getan worden wäre, führt es aber nicht aus

Beachten Sie, dass der Befehl rdfind die Option -deleteduplicates true zum Löschen von Duplikaten bereitstellt. Hoffentlich stört Sie diese kleine Spitzfindigkeit in der Befehlssyntax nicht. ;-)

$ rdfind -deleteduplicates true .
...
1 Datei gelöscht. <==

Wahrscheinlich müssen Sie den Befehl rdfind auf Ihrem System installieren. Es ist möglicherweise eine gute Idee, damit zu experimentieren, um sich mit der Verwendung vertraut zu machen.

Verwenden des Befehls fdupes

Der Befehl fdupes erleichtert außerdem die Identifizierung doppelter Dateien. Es bietet außerdem eine Reihe nützlicher Optionen – beispielsweise -r für die Iteration. In diesem Beispiel werden doppelte Dateien folgendermaßen gruppiert:

$ fdupes ~
/home/shs/UPGRADE
/home/shs/meinwin

/home/shs/lp.txt
/home/shs/lp.man

/home/shs/penguin.png
/home/shs/penguin0.png
/home/shs/hideme.png

Dies ist ein Beispiel für die Verwendung von Iteration. Beachten Sie, dass viele der doppelten Dateien wichtig sind (die .bashrc- und .profile-Dateien des Benutzers) und nicht gelöscht werden sollten.

# fdupes -r /home
/home/hai/home.html
/home/hai/index.html

/home/dory/.bashrc
/home/eel/.bashrc

/home/nemo/.profile
/home/dory/.profile
/home/shark/.profile

/home/nemo/tryme
/home/shs/tryme

/home/shs/Pfeil.png
/home/shs/PNGs/Pfeil.png

/home/shs/11/files_11.zip
/home/shs/ERIC/file_11.zip

/home/shs/penguin0.jpg
/home/shs/PNGs/penguin.jpg
/home/shs/PNGs/penguin0.jpg

/home/shs/Sandra_rotated.png
/home/shs/PNGs/Sandra_rotated.png

Der Befehl fdupe hat viele unten aufgeführte Optionen. Verwenden Sie den Befehl fdupes -h oder lesen Sie die Manpage für weitere Einzelheiten.

-r --recurse rekursiv
-R --recurse: rekursiv durch angegebene Verzeichnisse
-s --symlinks folgt symbolisch verknüpften Verzeichnissen
-H --hardlinks behandelt Hardlinks als Duplikate
-n --noempty leere Dateien ignorieren
-f --omitfirst lässt die erste Datei in jedem Satz von Übereinstimmungen aus
-A --nohidden versteckte Dateien ignorieren
-1 --sameline Liste der Übereinstimmungen in einer einzelnen Zeile
-S --size zeigt die Größe doppelter Dateien an
-m --summarize fasst Informationen zu doppelten Dateien zusammen
-q --quiet Fortschrittsanzeige ausblenden
-d --delete fordert den Benutzer zur Eingabe der zu speichernden Dateien auf
-N --noprompt: Bei Verwendung mit --delete bleibt die erste Datei im Set erhalten.
-I --immediate löscht Duplikate, sobald sie gefunden werden
-p --permissions unterscheidet keine Dateien mit unterschiedlichem Besitzer/Gruppe oder
         Berechtigungsbits als Duplikate
-o --order=WORD sortiert Dateien gemäß Spezifikation
-i --reverse Reihenfolge beim Sortieren umkehren
-v --version zeigt die Version der Fdupes an
-h --help zeigt die Hilfe an

Auch den Befehl fdupes müssen Sie möglicherweise installieren und eine Zeit lang verwenden, bevor Sie mit seinen zahlreichen Optionen vertraut sind.

Zusammenfassen

Linux-Systeme bieten eine Vielzahl von Tools zum Auffinden und (ggf.) Entfernen doppelter Dateien. Darüber hinaus verfügen sie über Optionen, mit denen Sie angeben können, wo gesucht werden soll und was mit den gefundenen Duplikaten geschehen soll.

Das ist alles für diesen Artikel. Ich hoffe, dass der Inhalt dieses Artikels für Ihr Studium oder Ihre Arbeit von gewissem Referenzwert ist. Vielen Dank für Ihre Unterstützung von 123WORDPRESS.COM.

über: https://www.networkworld.com/article/3390204/how-to-identify-same-content-files-on-linux.html#tk.rss_all

Autor: Sandra Henry-Stocker Thema: lujun9972 Übersetzer: tomjlw Korrekturleser: wxy

Das könnte Sie auch interessieren:
  • Linux-Befehl „du“ zum Anzeigen von Ordnergrößen und Sortieren in absteigender Reihenfolge
  • So zeigen Sie die Lese- und Schreibberechtigungen für Dateien im Linux-System an und ändern sie
  • So verwenden Sie „du“, um die Größe des von einer Datei oder einem Verzeichnis in Linux belegten Speicherplatzes anzuzeigen
  • Detaillierte Beispiele zum Anzeigen von Dateiattributen in Linux (ls, lsattr, file, stat)
  • So zeigen Sie die Anzahl der von einem Prozess geöffneten Dateihandles an und ändern sie in Linux
  • So zeigen Sie Ordnergrößen an und sortieren nach Größe in Linux
  • Anzeigen und Ändern von Verzeichnisdateiberechtigungen (Befehle) unter Linux
  • Eine einfache Möglichkeit, die Dateisystemblockgröße und die Speicherseitengröße in Linux anzuzeigen
  • So überprüfen Sie die Blockgröße des Linux-Dateisystems
  • So zeigen Sie den Typ des gemounteten Dateisystems in Linux an

<<:  Implementierung der CommonJS-Modularität in Browsern ohne Kompilierung/Server

>>:  Zusammenfassung der Linux-Befehlsmethoden zum Anzeigen verwendeter Befehle

Artikel empfehlen

Detaillierte Erläuterung des React setState-Datenaktualisierungsmechanismus

Inhaltsverzeichnis Warum setState verwenden? Verw...

Detaillierte Erklärung der CSS-Zeilenhöhe und -Höhe

Als ich kürzlich an CSS-Schnittstellen arbeitete,...

Zusammenfassung der 16 XHTML1.0- und HTML-Kompatibilitätsrichtlinien

1. Vermeiden Sie es, die Seite als XML-Typ zu dek...

So verwenden Sie vw+rem für das mobile Layout

Verwenden Sie immer noch das flexible Rem-Layout?...

So löschen Sie Tabellendaten in MySQL

Es gibt zwei Möglichkeiten, Daten in MySQL zu lös...

So kompilieren Sie den Linux-Kernel

1. Laden Sie die erforderliche Kernel-Version her...

react+antd.3x implementiert IP-Eingabefeld

In diesem Artikel wird der spezifische Code von r...

IE6-Verzerrungsproblem

Frage: <input type="hidden" name=&qu...

Eine kurze Diskussion über Flex-Layout und Skalierungsberechnung

1. Einführung in Flex Layout Flex ist die Abkürzu...

Welche Arten von MySQL-Verbindungsabfragen kennen Sie?

Vorwort Wenn die Abfrageinformationen aus mehrere...