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?
risposta
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.
Wao, era un comando così piccolo. Grazie Alnitak – DKSRathore
Er ... un file può contenere <1 link? Voglio dire, non lo renderebbe un inode senza file? – naught101
@ naught101 bene, fornendo -1 non riuscirebbe a trovare alcun file. – Alnitak
@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
find/-xdev -samefile filename
Vedi esempio qui https://www.gnu.org/software/findutils/manual/html_node/find_html/Hard-Links.html oppure combinare la risposta di Alnitak e amber_linux a find -L /where/to/search -samefile /some/link/to/file
per trovare tutti i collegamenti hard e soft a un determinato file.
Grazie mille! Questo era esattamente quello che stavo cercando - come trovare quali altri file sono in effetti lo stesso file di quello che sto guardando. – cb2
Penso che questo appartiene al server default –
Che cos'è serverfault? – DKSRathore
prova qui: serverfault.com –