2011-10-27 10 views
13

Tengo un montón de archivos de un lado (A) y un montón de otros archivos en otro lugar (B)archivo de sobrescritura en la copia si el contenido a de ellos no es lo mismo

estoy copiando de A a B , hay muchos archivos iguales, ¡pero el contenido puede ser diferente!

Normalmente utilicé mc (Midnight Commander) para hacerlo, y seleccioné "Sobrescribir si tuviera un tamaño diferente". Pero hay una situación en la que el tamaño es el mismo, pero el contenido es diferente. En este caso, mc mantiene el archivo en el lugar B y no lo sobrescribe.

En el cuadro de diálogo de sobrescritura de mc hay un trabajo "Actualizar", ¿no sé qué está haciendo? En ayuda, no hay tal información, tal vez esta es una solución?

Así que estoy solución que me puede ayudar a copiar todos los archivos de A a B y sobrescribir los archivos en su sitio B si existe y contenido es diferente de A.

si existe el archivo en "B" lugar (búsqueda el mismo nombre) y el contenido es diferente, tiene que ser sobrescrito por el archivo del lugar "A" cada vez.

¿Conoces alguna solución?

+0

por cierto, todos los archivos son archivos de texto plano – user1016265

Respuesta

17

Ha intentado la línea de comandos:

cp -ru A/* B/ 

debe copiar recursivamente todos los archivos modificados (marca de tiempo más reciente) del directorio de la A a la B. directorio

También puede utilizar -a en lugar de en el -r línea de comando, dependiendo de lo que quieras hacer. Consulte la página del manual cp.

+1

parece que esto es lo que necesito medios -u copiar sólo cuando el archivo de origen es más reciente que el archivo de destino o cuando el archivo de destino no se encuentra pero lo que marca de tiempo busca ? tiempo record ? y realmente no es la solución ideal, pero quizás la más fácil por ahora, gracias. – user1016265

0

Es posible que desee mantener algún tipo de archivo 'índice' que contenga el hash SHA-1 de los archivos, que usted crea cuando los escribe. Luego puede calcular el hash "fuente" y compararlo con el hash "destino" del archivo de índice. Esto solo funcionará si este proceso es la única forma en que los archivos se escriben en el destino.

+0

¿Conoces algún software que pueda hacer algo similar? 1. make hash para el árbol de archivos fuente. 2. make hash para el árbol de archivos de destino. 3. compararlo y copiar solo los archivos modificados. r ight? – user1016265

+0

No está disponible, no, pero suena divertido escribirse usando la biblioteca de openssl :) – trojanfoe

9

Usaría rsync ya que esto no dependerá de la fecha del archivo, pero en realidad verifica si el contenido del archivo ha cambiado. Por ejemplo:

#> rsync -cr <directory to copy FROM> <directory to copy TO> 

copias Rsync archivos hacia o desde un host remoto, o localmente en el host actual (no se admite la copia de archivos entre dos máquinas remotas).

-c, --checksum skip based on checksum, not mod-time & size 
-r, --recursive recurse into directories 

Ver man rsync para obtener más opciones y detalles.

+0

El interruptor '-c' es la clave aquí. Quería evitar que la marca de tiempo "modificada" cambiara y comparara en el archivo * contenido * en lugar de sólo marcas de tiempo. ¡Gracias! – aardvarkk

Cuestiones relacionadas