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).
Hier ist ein Weg:
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 cut -f 1 | sort | uniq -d
verwendest, und gib dieses in eine zweite temporäre Datei aus 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.
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)).
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:
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.
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.