Necesito encontrar todos los archivos enlazados en un sistema de archivos determinado. Por ejemplo, obtenga una lista de archivos, cada línea contiene pares vinculados, o trillizos, etc.
Entiendo más o menos cómo hacerlo, es necesario crear un diccionario con clave de inodo para todos los archivos / directorios en un sistema de archivos, excluir "." y enlaces "..", y luego indodes con más de un nombre son enlaces duros ... Pero espero que tal vez exista una solución preparada, o que alguien ya haya escrito dicho script.
find / -type f -links +1 -printf '%i %n %p\n'
sort
(+uniq
)? Tenía curiosidad, así que lo probé en mi computadora principal (16GB i5-2500k con ssd). con 2187757 archivos (find / -xdev -type f | wc
) tarda 12 segundos reales al devolver 3820 archivos / 570 inodes (time sudo find / -xdev -type f -links +1 -printf "%i\n" | sort | uniq | wc
). necesitaría incluir el%n %p
para los archivos reales ya que los saqué para contar inodos.proporciona una lista de todos los archivos que tienen más de un enlace, es decir, archivos para los que existe un enlace duro. Recorrer esto es relativamente fácil: una solución hacky si no tienes tantos archivos sería
Pero sinceramente espero que haya mejores soluciones, por ejemplo, dejando que la primera
find
llamada imprima números de inodo y luego usandofind
la-inum
opción para mostrar todos los archivos asociados con este inodo.fuente
find . -type f -printf '%i %p\n'
, permitiría construir una solución mucho más rápida.for
bucle, ajustar IFS en consecuencia funcionaría. Para analizar el resultado del comando find en mi comentario, declarar que todo entre el primer espacio y el final de la línea como el nombre del archivo también debería funcionar.lost+found
etc.); lo cual es especialmente importante, si la salida debe procesarse más como en la segunda línea.En mi humilde opinión, la mejor manera es usar la siguiente línea (seguro que tienes que reemplazar
/PATH/FOR/SEARCH/
con lo que quieras buscar):esto escanea el sistema de archivos solo una vez, muestra el inodo, el número de enlaces duros y la ruta de los archivos con más de un enlace duro y los ordena de acuerdo con el inodo.
Si le molestan los mensajes de error de las carpetas que no puede leer, puede expandir la línea a esto:
fuente