2009-11-27 11 views
14

¿Cómo podría obtener la lista de todos los archivos vinculados en mi sistema o desde un directorio determinado? Solía ​​crear enlaces, pero se volvieron inmanejables con el tiempo. Quiero la lista de todos esos enlaces desde un directorio. ¿Alguien puede ayudar?¿Cómo encontrar todos los archivos que son básicamente enlaces blandos o duros de otros directorios o archivos en Linux?

+1

Creo que esto pertenece a serverfault –

+0

¿Qué es serverfault? – DKSRathore

+0

try here: serverfault.com –

Respuesta

27

Encontrar enlaces simbólicos es fácil:

% find . -type l 

Encontrar enlaces duros es difícil, porque si un subdirectorio del directorio en cuestión también tiene subdirectorios entonces aquellos aumento del número de enlaces duro. Así es como los subdirectorios están vinculados a sus padres en UNIX (es la entrada .. en cada subdirectorio).

Si sólo desea encontrar ligado archivos (y no directorios), esto va a funcionar:

% find . -type f \! -links 1 

Esto funciona porque un archivo que hace tener enlaces duros tendrán un enlace de recuento> 1 , y el archivo no enlazado tiene un número de enlaces == 1, por lo tanto, este comando busca todos los archivos cuyo número de enlaces <> 1

por otra parte, en las versiones más recientes de find que puede usar:

% find . -type f -links +1 

Esto funciona por la misma razón que la anterior; sin embargo, las versiones más nuevas de find pueden tomar + n o -n en lugar de solo un número. Esto es equivalente a probar para mayor que n o menor que n, respectivamente.

+0

Wao, este fue un comando tan pequeño. Gracias Alnitak – DKSRathore

+0

Er ... ¿puede un archivo tener <1 enlace? Quiero decir, ¿eso no lo convertiría en un inodo sin archivos? – naught101

+0

@ naught101 bien, el suministro -1 de hecho no podría encontrar ningún archivo. – Alnitak

2

@OP, si tiene GNU find, puede encontrar enlaces duros usando -printf "%n", p.

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 
Cuestiones relacionadas