¿Puedes saber si se ha cambiado el nombre de un archivo?

¿Puedes saber si se ha cambiado el nombre de un archivo?

Muchas herramientas que existen para sincronizar archivos no son del todo adecuadas para sincronizar su directorio de inicio. Por esto, y para aprender Ruby, he estado trabajando en mi propia herramienta de sincronización.

Un problema que encontré, que creo que está en mis herramientas de sincronización, es lo que sucede cuando el usuario cambia el nombre de un archivo o lo elimina. Solo pensando en el primer caso (si el usuario le cambia el nombre), ¿hay alguna manera de saber que no se trata de un archivo nuevo sino de un archivo al que se le ha cambiado el nombre? Quizás una identificación única del archivo que no conozco. Los descriptores de archivos parecen algo a considerar, pero estoy bastante seguro de que es un concepto diferente.

Respuesta1

No hay forma de saber con seguridad si se ha cambiado el nombre de un archivo.

Cuando se cambia el nombre de un archivo, suinodoEl número no cambia. (Esto puede no ser cierto para los sistemas de archivos “exóticos”, como los sistemas de archivos de red, pero es cierto para todos los sistemas de archivos Unix “nativos”). Sin embargo, lo contrario no es cierto: si se elimina un archivo, se puede crear un archivo nuevo con el mismo nombre. mismo número de inodo. Entonces, incluso si ve que un archivo tiene el mismo número de inodo que tenía otro archivo antes, eso no implica necesariamente que se haya cambiado el nombre del archivo.

El número de inodo identifica de forma única el archivo.mientras exista. Eso lo hace adecuado para detectar enlaces físicos, pero no para detectar cambios de nombre.

Los descriptores de archivos están asociados con un proceso específico y son inútiles aquí.

Puede considerar una heurística que si un archivo tiene el mismo tamaño, tiempo de modificación y número de inodo que antes pero con un nombre diferente, entonces significa que se le ha cambiado el nombre. Esta heurística es similar a lo que hacen muchas herramientas de sincronización para detectar archivos sin cambios: mismo nombre, tamaño y hora de modificación.

Todas las herramientas que se me ocurren para cambiar el nombre del archivo de seguimiento lo hacen en función del contenido del archivo.Unísonodetecta archivos renombradossi al menos uno de los puntos finales es remoto. Algunos sistemas de control de versiones modernos, como git, también detectan archivos renombrados.

Sospecho firmemente que cualquier cosa que quieras hacer con la sincronización de archivos, entresincronización,Unísonoy control de versiones, ya existe.

Respuesta2

Los descriptores de archivos se crean para un programa cuando abre un archivo y solo son válidos hasta que el programa lo cierra nuevamente. Tal como sospechabas: un concepto diferente.

Si se acaba de cambiar el nombre del archivo, los inodos no cambiarán, puede usarlo, pero a menos que los cambios de nombre ocurran con frecuencia, dudo que valga la pena.

información relacionada