Come trovare tutti i file che sono sostanzialmente collegamenti soft o hard di altre directory o file su Linux?

StackOverflow https://stackoverflow.com/questions/1810334

Domanda

Come posso ottenere l'elenco di tutti i file collegati sul mio sistema o da una determinata directory. Ho usato per creare collegamenti ma sono diventati ingestibili con il tempo. Voglio la lista di tutti questi collegamenti da una directory. Qualcuno può aiutare?

È stato utile?

Soluzione

Trovare i symlink è facile:

% find . -type l

Trovare collegamenti hard è difficile, perché se una sottodirectory della directory in questione ha anche delle sottodirectory, quelle aumentano il conteggio dei collegamenti hard. Ecco come le sottodirectory sono collegate ai loro genitori in UNIX (è la voce .. in ogni sottodirectory).

Se vuoi solo trovare file (e non directory) collegati, funzionerà:

% find . -type f \! -links 1

Funziona perché un file che ha ha collegamenti fissi avrà un conteggio dei collegamenti > 1 e il file non collegato ha un conteggio dei collegamenti == 1, quindi questo comando cerca tutti i file il cui conteggio dei collegamenti & Lt; & Gt; 1

In alternativa, nelle versioni più recenti di find puoi usare:

% find . -type f -links +1

Funziona per lo stesso motivo di cui sopra; tuttavia, le versioni più recenti di find possono richiedere + n o -n anziché solo un numero. Ciò equivale a testare rispettivamente per maggiore o minore di n.

Altri suggerimenti

find / -xdev -samefile filename

@OP, se hai GNU find, puoi trovare hard link usando -printf "%n", per es.

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

Vedi ad es. Qui https://www.gnu.org/software/findutils /manual/html_node/find_html/Hard-Links.html o combinare Alnitak e la risposta di amber_linux in find -L /where/to/search -samefile /some/link/to/file per trovare tutti i collegamenti hard e soft a un determinato file.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top