Cómo encontrar todos los archivos que son, básicamente, blando o duro, enlaces a otros directorios o archivos en linux?

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

Pregunta

¿Cómo podría obtener la lista de todos los archivos vinculados en mi sistema o de un directorio determinado.He usado para crear enlaces pero se volvió inmanejable con el tiempo.Quiero la lista de todos los enlaces de un directorio.Alguien puede ayudar?

¿Fue útil?

Solución

Encontrar enlaces simbólicos es fácil:

% find . -type l

Encontrar enlaces duros es complicado, porque si un subdirectorio del directorio en cuestión también tiene subdirectorios, a continuación, aquellos aumentar el enlace duro a contar.Que es como los subdirectorios están vinculados a sus padres en UNIX (es el .. entrada en cada uno de los subdirectorios).

Si sólo desea buscar vinculados los archivos (y no los directorios), esto va a funcionar:

% find . -type f \! -links 1

Esto funciona debido a que un archivo que ¿ tiene enlaces duros tendrá un enlace count > 1, y desvinculado de archivo tiene un link count == 1, por lo tanto este comando busca todos los archivos cuyo enlace contar <> 1

Alternativamente, en las versiones más recientes de find usted podría utilizar:

% find . -type f -links +1

Esto funciona por la misma razón que el anterior,sin embargo, las versiones más recientes de encontrar puede tomar +n o -n en lugar de sólo un número.Esto es equivalente a la prueba para mayores que n o menos de n, respectivamente.

Otros consejos

find / -xdev -samefile filename

@OP, Si usted tiene GNU encontrar, usted puede encontrar enlaces duros usando -printf "%n", por ejemplo,

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

Ver, por ejemplo,aquí https://www.gnu.org/software/findutils/manual/html_node/find_html/Hard-Links.html o combinar Alnitak y amber_linux respuesta en find -L /where/to/search -samefile /some/link/to/file encontrar todos los enlaces duros y suaves para un archivo dado.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top