2009-11-27 12 views
14

Come posso ottenere l'elenco di tutti i file collegati sul mio sistema o da una determinata directory. Ero solito creare collegamenti ma diventavano ingestibili col tempo. Voglio l'elenco di tutti questi collegamenti da una directory. Qualcuno può aiutare?Come trovare tutti i file che sono fondamentalmente collegamenti soft o hard di altre directory o file su linux?

+1

Penso che questo appartiene al server default –

+0

Che cos'è serverfault? – DKSRathore

+0

prova qui: serverfault.com –

risposta

27

Trovare collegamenti simbolici è facile:

% find . -type l 

Trovare hard link è difficile, perché se una sottodirectory della directory in questione ha anche sottodirectory poi quelli aumentare il numero di hard link. Ecco come le sottodirectory sono collegate ai loro genitori in UNIX (è la voce .. in ciascuna sottodirectory).

Se si desidera solo trovare legata file (e non directory), questo funzionerà:

% find . -type f \! -links 1 

Questo funziona perché un file che fa avere collegamenti reali avrà un link conteggio> 1 , e il file non collegato ha un conteggio dei collegamenti == 1, quindi questo comando si presenta per tutti i file il cui collegamento conteggio <> 1

in alternativa, sulle versioni più recenti di find si può usare:

% find . -type f -links +1 

Questo funziona per lo stesso motivo di cui sopra; tuttavia, le versioni più recenti di find possono prendere + n o -n anziché solo un numero. Questo è equivalente al test per maggiori di n o meno di n, rispettivamente.

+0

Wao, era un comando così piccolo. Grazie Alnitak – DKSRathore

+0

Er ... un file può contenere <1 link? Voglio dire, non lo renderebbe un inode senza file? – naught101

+0

@ naught101 bene, fornendo -1 non riuscirebbe a trovare alcun file. – Alnitak

2

@OP, Se avete GNU trovare, si possono trovare hard link utilizzando -printf "%n", esempio

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 
Problemi correlati