2009-08-27 20 views

Respuesta

5

Aquí está una manera:

  • Uso find -printf "%i:\t%p o similar para crear una lista de todos los archivos con el prefijo i-nodo, y la salida a un archivo temporal
  • Extracto del primer campo - el nodo-i con ':' anexa - y ordenar para juntar los duplicados y luego restringirlos a los duplicados, utilizando cut -f 1 | sort | uniq -d, y enviarlos a un segundo archivo temporal
  • Use fgrep -f para cargar el segundo archivo como una lista de cadenas para buscar y buscar el primer archivo temporal.

(Cuando escribí esto, interpreté la pregunta como encontrar todos los archivos que tenían inodos duplicados. Por supuesto, uno podría usar la salida de la primera mitad de este como un tipo de índice, de inodo a ruta, al igual que la ubicación funciona.)

En mi propia máquina, uso mucho este tipo de archivos y los mantengo ordenados. También tengo una aplicación de indexador de texto que luego puede aplicar la búsqueda binaria para encontrar rápidamente todas las líneas que tienen un prefijo común. Tal herramienta termina siendo bastante útil para trabajos como este.

-2

Lo que normalmente hago es: ls -i <file> para obtener el inode de ese archivo, y luego find /dir -type f -inum <inode value> -mount. (Desea que -mount evite buscar en diferentes sistemas de archivos, que probablemente sea parte de sus problemas de rendimiento.)

Aparte de eso, creo que eso es todo.

+2

Él ya está usando '-xdev', que es lo mismo que '-mount'. Entonces esto no es mejor. – mark4o

+0

'-samefile' ya lo hace en un solo paso. –

7

No hay un mapeo de inode para nombrar. La única forma es recorrer todo el sistema de archivos, que como señaló fue O (número de archivos). (En realidad, creo que es θ (número de archivos)).

3

Sé que esta es una pregunta anterior, pero muchas versiones de find tienen una opción inum para que coincida fácilmente con un número de inodo conocido. Usted puede hacer esto con el siguiente comando:

find . -inum 1234 

Esto todavía se ejecutará a través de todos los archivos si se le permite regular, pero una vez que llegue un partido siempre se puede detener manualmente; No estoy seguro de si find tiene una opción para detenerse después de un solo partido (tal vez con una declaración -exec?)

Esto es mucho más fácil que el dumping salida a un archivo, clasificación, etc., y otros métodos, por lo que debe utilizarse Cuando esté disponible.

+0

buena solución – Labynocle

+0

Gran respuesta. Incluso mi antiguo servidor gentoo tiene la opción '-inum'. – suspectus

+0

Para detenerse en la primera coincidencia puede intentar algo como 'encontrar. -inum 1234 | cabeza -n1'. – Ruslan

Cuestiones relacionadas