2009-11-27 8 views
14

Wie konnte ich die Liste aller verknüpften Dateien auf meinem System oder von einem bestimmten Verzeichnis erhalten. Ich habe Links erstellt, aber sie wurden mit der Zeit nicht mehr handhabbar. Ich möchte die Liste aller solcher Links aus einem Verzeichnis. Kann jemand helfen?Wie finden Sie alle Dateien, die im Grunde weiche oder harte Links anderer Verzeichnisse oder Dateien auf Linux sind?

+1

Ich denke, das gehört zu Serverfehler –

+0

Was ist Serverfault? – DKSRathore

+0

versuchen Sie es hier: serverfault.com –

Antwort

27

Symlinks zu finden ist einfach:

% find . -type l 

harte Links zu finden heikel, denn wenn ein Unterverzeichnis des Verzeichnisses in Frage auch Unterverzeichnisse hat dann diese Erhöhung des Hardlink zu zählen. So sind Unterverzeichnisse mit ihren Eltern in UNIX verbunden (es ist der .. Eintrag in jedem Unterverzeichnis).

Wenn Sie nur Dateien (und keine Verzeichnisse) verbunden finden, wird diese Arbeit:

% find . -type f \! -links 1 

Dies funktioniert, weil eine Datei, die tut haben harte Links einen Link haben count> 1 und nicht verknüpfte Datei einen Link Zahl == hat 1, daher sieht dieser Befehl für alle Dateien, deren Linkzähler <> 1

Alternativ auf neuere Versionen von find Sie nutzen könnten:

% find . -type f -links +1 

Dies funktioniert aus dem gleichen Grund wie oben; Neuere Versionen von find können jedoch + n oder -n statt nur einer Zahl verwenden. Dies entspricht einem Test für mehr als n bzw. weniger als n.

+0

Wao, das war so ein kleiner Befehl. Danke Alnitak – DKSRathore

+0

Er ... kann eine Datei <1 Link haben? Ich meine, würde es das nicht zu einem düsteren Inode machen? – naught101

+0

@ naught101 Nun, Liefern von -1 würde tatsächlich keine Dateien finden. – Alnitak

2

@OP, Wenn Sie GNU finden, finden Sie feste Verbindungen mit -printf "%n", z.

find /path -type f -printf "%f/%n/%i\n" | while IFS="/" read filename num_hlinks inum 
do 
echo "Filename: $filename. Number of hard links: $num_hlinks, inode: $inum" 
# if 2 or more files have the same inode number, then they are hard links. 
# you can therefore count how many $inum that are the same and determine those hard links, which 
# you have to try doing yourself. 
done 
3
find/-xdev -samefile filename