
Imagine una SAN grande con cien mil archivos en una estructura de directorios desorganizada.
Los archivos se moverán a una nueva SAN con una estructura de directorios organizada. Se cambiará el nombre de algunos archivos cuando se muevan. Además, muchos archivos tienen referencias, por ejemplo, las hojas de cálculo de Excel están interconectadas y se romperán después del traslado.
Necesitamos mantener un mapa de rutas de archivos desde y hacia, en caso de que necesitemos consultar el archivo, por ejemplo, para arreglar un enlace roto.
Investigué para ver si había algo en el mercado, pero no tuve suerte. Por lo tanto, comencé a escribir una aplicación que permite a los usuarios arrastrar y soltar archivos y registros en SQL dB:
No estoy 100% seguro de este enfoque. ¿Alguien sabe si hay una mejor manera de hacer esto? ¿Hay algo en Windows?
Estábamos pensando en escanear los directorios nuevos y antiguos y hacer un mapa de esa manera. Desafortunadamente, esto no funcionará ya que el nombre del archivo podría cambiar y las fechas de creación/modificación, etc. serán hoy para los archivos movidos.
Estábamos pensando en tener algún identificador único en cada archivo, pero esa idea nunca tuvo éxito, ya que ¿dónde almacenarías el identificador único para diferentes tipos de archivos?
¿Posiblemente un script AutoHotKey?
Respuesta1
Construí un sistema de implementación automatizado en C# para uno de mis clientes. Este problema parece similar excepto en escala.
Cosas que fueron atendidas en ADS:
- Pago automático desde SVN.
- Recorre todas las carpetas.
- Cada carpeta se puede incluir o excluir del lanzamiento.
- Si se incluye una carpeta, también se incluyen todos los archivos y subcarpetas. Lo mismo ocurre con la exclusión.
- Al igual que la inclusión, cada carpeta se puede reubicar en una nueva ubicación en la carpeta de implementación.
- Todo fue arrastrar y soltar (afortunadamente, los scripts de implementación no tienen que modificarse con tanta frecuencia).
- La parte más crítica fue la comparación de archivos binarios para copiar solo archivos modificados. <-- Esto también parece ser lo más importante para ti. Como solo estaba tratando con archivos de código como C# o archivos de código Perl, esta fue una verificación fácil:
- Tome archivos a izquierda y derecha
- Elimina todos los espacios en blanco.
- Compare archivos un byte a la vez.
En su caso, a menos que los archivos sean bastante grandes, puede utilizar el mismo enfoque. Si los archivos son enormes (suponiendo que sean archivos de datos), una simple comparación de encabezado y pie de página debería ser suficiente.
Estábamos pensando en tener algún identificador único en cada archivo, pero esa idea nunca tuvo éxito, ya que ¿dónde almacenarías el identificador único para diferentes tipos de archivos?
Esto es con lo que comencé también, pero mi problema no era tan grave así que lo descarté. Técnicamente, cada objeto FileInfo estaba envuelto en una clase especializada que tenía un campo específico de tipo GUID. Estaba guardando esta serie de clases serializadas en archivos XML.
<FIItem>
<ID>*some guid*</ID>
<FileInfoObj>*file info which contains full file path*</FileInfoObj>
</FIItem>