Asegúrese de que la descarga no sea un engaño

Asegúrese de que la descarga no sea un engaño

Quiero descargar (recursivamente) un directorio de archivos a una ubicación desde un servidor WebDav. Si el archivo ya está presente (en algún lugar), no se volverá a descargar. Sin embargo, la estructura de carpetas no es la misma.

¿Existe una manera fácil de hacer eso? Busqué duplicados, pero es solo para detectar y eliminar duplicados. Los archivos son muy grandes y los gastos generales serían demasiado grandes.

El sistema de archivos de destino no admite la deduplicación. Sé que cp -n(desde un punto de montaje FUSE) no sobrescribiría los archivos existentes, pero la estructura de carpetas no es la misma. Así que estoy un poco estancado.

Respuesta1

De mirarlos clientes Linux disponibles para WebDAV, mi método preferido para hacer esto sería:

  1. Utilice GVFS o uno de los módulos del sistema de archivos WebDAV (davfs2 o fusedav) para "asignar" los archivos del servidor WebDAV remoto a la ruta del sistema de archivos local.

  2. Utilice el incorporadoCPcomando con la -nopción de indicarle que "no golpee" los archivos en el destino. Tenga en cuenta que ciertos shells, como dashen Ubuntu, ejecutarán una builtinversión de cpforma predeterminada y es posible que esta función integrada no admita la -nopción. Para obtener mejores resultados, asegúrese de ejecutar la versión GNU Coreutils cpejecutando /bin/cpo /usr/bin/cp(dependiendo de dónde se encuentre el binario en su sistema específico).

EDITAR: Leí mal tu pregunta original.

Creo que lo que estás diciendo es que tienes una situación en la que el archivo file1.txtexiste en dos rutas diferentes en el servidor WebDAV, y elcontenidode esos dos archivos es exactamente igual. Y como ya tiene una copia del archivo, ¿no desea descargar una segunda o tercera copia del archivo porque desperdicia ancho de banda?

Bien,desde el lado del cliente, esto sería muy difícil de hacer. Este es el por qué.

tienes que mirarque estas comparandopara determinar si el archivo es único y elrequisitos/costospara hacer esa comparación.

Ificticio(erróneamente) que lo que estabas comparando es elcaminoen relación con la raíz de la estructura de carpetas WebDAV. El costo de hacer una comparación de igualdad de rutas es muy fácil: simplemente mira las dos cadenas de rutas, como /dir1/dir2/file1.txty ve si coinciden. Si lo hacen, es un duplicado. Si no lo hacen, no lo es.

Otra cosa que podrías comparar es el archivo.nombre, ignorando elcamino. Entonces, por ejemplo, ¿consideraría estos dos archivos duplicados: /dir1/dir2/file1.txty /dir3/dir4/file1.txt? Bueno, si eressolocomparando en base a lanombre, entonces estos se considerarían duplicados. Sin embargo, podemos mezclar y combinar varias pruebas de duplicación como queramos, para realizar el tipo de prueba correcto para nuestro caso de uso.

Otras propiedades menos útiles para comparar incluyentamaño del archivo,atributos(también conocido comometadatos), extensión de archivo, etc. Estas cosas no le dan mucho para continuar en términos de poder de evaluación de duplicados, porque en la mayoría de los casos, es fácil construir un archivo que tiene las mismas propiedades que otro archivo pero contenidos completamente diferentes. , y la mayoría de la gente no consideraría que los dos archivos estén duplicados si el contenido difiere.

En mi opinión, lo más importante que puedes comparar es el archivo.contenido. Desafortunadamente, desde la perspectiva de un cliente WebDAV, no hay forma de conocer el contenido del archivo hasta que ya lo haya descargado. Y en lo que respecta al cliente, el contenido del archivo podría cambiar durante o después de la transferencia del archivo, en cuyo caso, los resultados de la comparación duplicada cambiarían si volviera a descargar el archivo.

Hay dos formas básicas de comparar el contenido de un archivo:byte por byte, yhash. Byte por byte es la forma más "garantizada" de comprobar si hay duplicados, pero tiene la limitación de que hay que comparar.todo el archivo, lo cual es enormemente lento para una gran cantidad de datos. Considere también que la complejidad algorítmica básica de la detección de duplicados es O(n^2), lo que significa que tendría que comparar el contenido de cada archivo con el contenido de cada uno de los demás archivos para determinar si es un duplicado. El uso de un hash criptográfico para comparar los archivos puede reducir enormemente la cantidad de datos que deben compararse o transferirse, pero la desventaja es que introduce una posibilidad infinitamente pequeña de que dos archivos puedan ser realmentediferentepero tienen el mismo hash, lo que se conoce como colisión de hash.

Pero nuevamente, desde elclienteperspectiva, no es posible saberquéel contenido del archivo es, o incluso su hash, a menos que usted:

  • Descargue el archivo del servidor; o
  • Convenza al servidor para que calcule un valor hash localmente y luego descargue el hash.

En el primer caso, estás descargando el archivo para determinar si es un duplicado y evitar descargarlo, por lo que obviamente no puedes hacerlo: estás desperdiciando el ancho de banda que estás tratando de evitar.solo para realizar las comparaciones!

En el último caso, es posible que tengas razón. Un hash SHA1 de un archivo muy grande tiene solo un par de bytes y representa una pequeña fracción del tamaño del archivo grande. Sería bastante práctico descargar hashes de todos los archivos y hacer una O(n^2)comparación de loshashespara determinar qué archivo descargar. Sin embargo, todavía te encontrarás con problemas de condiciones de carrera si los datos del archivo cambian en el servidor mientras haces estas comparaciones, por lo que debes asegurarte de tener en cuenta la sincronización si es importante para ti.

Entonces, conclusión:

  • SIno tiene control total del software sobre el servidor WebDAV y no puede realizar cambios en su configuración, no tiene suerte (tm) para determinar si ya tiene una copia del mismocontenido del archivoque se almacenan en varios archivos en el servidor,a menos queel administrador del servidor ya pone a disposición algún tipo de archivos hash para cada archivo en el servidor, lo que podría permitirle cierto grado de éxito si puede confiar en los valores hash.
  • SIhacertener control total del software sobre el servidor WebDAV y estarcapazPara cambiar su configuración, es posible que desee escribir un script o un programa (o utilizar uno ya disponible) para crear un archivo hash con una extensión como, por ejemplo, .sha1sumen el mismo directorio que todos los archivos alojados en el servidor WebDAV. Esto podría permitirle descargar solo los hashes y compararlos, con un costo de ancho de banda relativamente modesto en comparación con el tamaño de los archivos, suponiendo que sus archivos tengan más de un par de kilobytes de tamaño.

información relacionada