44 votos

Rsync : copiando las marcas de tiempo solamente

Actualmente tengo dos directorios A/ y B/ que son idénticos en todos los aspectos, con la excepción de las marcas de tiempo. Por lo tanto, si ejecuto el comando :

rsync --dry-run -crvv A/ B/

a continuación, todos los archivos están marcados "al día", mientras que el comando :

rsync --dry-run -rvv A/ B/

muestra que todos los archivos se copian a través de Un/ a B/.

Mi pregunta es la siguiente : dado que sé que los archivos son idénticos (con respecto a contenido), entonces hay alguna manera (a través de rsync o de otro tipo) para establecer las marcas de tiempo de los archivos en B/ ser idéntico a las marcas de hora de los archivos en/, sin copiar todos los archivos de Un/ a B/ ?

Gracias

76voto

Grant Pannell Puntos 231

El uso de -t (preservar los datos) y --size-only sólo comparar archivos en tamaño. Si el tamaño de los partidos, rsync no va a copiar el archivo pero desde -t está especificado, se actualizará la marca de tiempo en el archivo de destino sin copiar.

Asegúrese de no utilizar -u (actualización) ya que esto va a omitir los archivos que ya existen y completamente saltar la actualización de la hora y la fecha.

Yo tenía el problema de que originalmente no usar rsync para copiar un par de archivos a una unidad nueva, y por lo tanto las marcas de tiempo se actualiza la hora actual. He utilizado el siguiente comando para sincronizar todo correctamente en una cantidad decente de tiempo:

rsync -vrt --size-only /src /dest

6voto

user115916 Puntos 21

Usando --tamaño-sólo hará que rsync para saltar la comparación de archivos de marcas de tiempo (y por lo tanto el contenido del archivo) si el tamaño de partido. La combinación de esta con-times clonar la fecha y hora a través del objetivo de árbol.

3voto

Stone Puntos 4701

Creo que rsync es la herramienta adecuada para hacer esto, pero si quieres algún script para hacer esto que algo de esto puede dar un buen comienzo.

Usted puede obtener una lista de archivos con las marcas de tiempo (acces veces) como este:

find . -printf '"%p" %a\n' -type f > /tmp/times

Y obtener el correspondiente tiempo de comandos de actualización:

 while read line; do echo touch -a -d \"${line#* }\" ${line%% *}; done < /tmp/times

No es un guión completo, pero un buen comienzo!:)

1voto

user32900 Puntos 1

Bien, ciertamente se podría escribir un script que lee la marca de tiempo de un lado y, a continuación, utiliza el tacto para establecer en el mismo archivo en el otro lado.

Pero que es probable que tome mucho más que simplemente dejar que el rsync intentar copiar todos los archivos. Muy poca información realmente será transferido (solo bloque de hashes si los archivos son realmente idénticos). Pero el contenido completo de cada archivo tendrá que ser leído en cada lado, al menos. Lo de que esté limitado por el disco ancho de banda o IOPS podría tomar un tiempo. Pero probablemente aún menos tiempo de escribir y probar un script para hacerlo.

-1voto

Tim Puntos 1982

El rsync manual: man rsync listas de un -t y -N interruptor, puede ser vale la pena tocar el violín.

EnMiMaquinaFunciona.com

EnMiMaquinaFunciona es una comunidad de administradores de sistemas en la que puedes resolver tus problemas y dudas.
Puedes consultar las preguntas de otros sysadmin, hacer tus propias preguntas o resolver las de los demás.

Powered by: