Was ist der schnellste Weg, um alle Dateien mit demselben Inode zu finden?

8

Der einzige Weg, den ich kenne, ist:

%Vor%

Aber es ist wirklich langsam. Ich möchte ein Tool wie locate finden. Die wirklichen Probleme kommen, wenn Sie eine Menge Datei haben, ich nehme an, die Operation ist O (n).

    
Breezeight 27.08.2009, 10:44
quelle

4 Antworten

5

Hier ist ein Weg:

  • Verwenden Sie find -printf "%i:\t%p oder eine ähnliche Datei, um eine Liste aller Dateien mit dem Präfix inode zu erstellen und sie in eine temporäre Datei
  • auszugeben
  • Extrahiere das erste Feld - den Inode mit ':' angehängt - und sortiere, um Duplikate zusammenzufügen und dann auf Duplikate zu beschränken, indem du cut -f 1 | sort | uniq -d verwendest, und gib dieses in eine zweite temporäre Datei aus
  • Verwenden Sie fgrep -f , um die zweite Datei als Liste von Strings zu laden, um die erste temporäre Datei zu suchen und zu durchsuchen.

(Als ich dies schrieb, interpretierte ich die Frage so, als würde ich alle Dateien finden, die doppelte Inodes hatten. Natürlich könnte man die Ausgabe der ersten Hälfte als eine Art Index verwenden, von Inode zu Pfad, ähnlich wie Lokalisieren funktioniert.)

Auf meiner eigenen Maschine benutze ich diese Art von Dateien sehr oft und sortiere sie. Ich habe auch eine Text-Indexer-Anwendung, die dann binäre Suche anwenden kann, um schnell alle Zeilen zu finden, die ein gemeinsames Präfix haben. Solch ein Werkzeug ist für solche Jobs sehr nützlich.

    
Barry Kelly 27.08.2009, 10:52
quelle
7

Es gibt keine Zuordnung von inode zu name. Die einzige Möglichkeit besteht darin, das gesamte Dateisystem zu durchlaufen, was, wie Sie angaben, O (Anzahl der Dateien) ist. (Eigentlich denke ich, es ist θ (Anzahl der Dateien)).

    
Jörg W Mittag 29.08.2009 12:53
quelle
3

Ich weiß, dass dies eine alte Frage ist, aber viele Versionen von find haben eine Option inum , um leicht mit einer bekannten Inode-Nummer übereinzustimmen. Sie können dies mit dem folgenden Befehl tun:

%Vor%

Dies wird immer noch alle Dateien durchlaufen, wenn dies erlaubt ist, aber sobald Sie eine Übereinstimmung erhalten, können Sie sie immer manuell stoppen; Ich bin mir nicht sicher, ob find eine Option hat, nach einer einzelnen Übereinstimmung anzuhalten (vielleicht mit einer -exec -Anweisung?)

Dies ist viel einfacher als die Ausgabe in eine Datei zu speichern, sortieren usw. und andere Methoden, sollte also verwendet werden, wenn verfügbar.

    
Haravikk 18.08.2014 17:02
quelle
-2

Was ich normalerweise tun würde: ls -i <file> , um den Inode dieser Datei zu erhalten, und dann find /dir -type f -inum <inode value> -mount . (Sie möchten, dass -mount die Suche auf verschiedenen Dateisystemen vermeidet, was wahrscheinlich zu Ihren Leistungsproblemen gehört.)

Abgesehen davon denke ich, dass es darum geht.

    
John Feminella 27.08.2009 10:52
quelle

Tags und Links