Estoy comenzando rsync
e intenté usarlo para mantener sincronizadas dos carpetas en el sistema local. Tengo una carpeta de origen, cuyo contenido cambia con el tiempo (se agregan algunos archivos, algunos cambios y otros se eliminan) y una carpeta de destino que quiero que sea casi un espejo de la fuente. Entonces, lo que probé fue usar rsync así:
rsync -a --delete "${source_dir}" "${target_dir}";
Esto mantiene el contenido del objetivo exactamente igual que el contenido de la fuente. Sin embargo, me gustaría poder agregar algunos archivos al destino y no a la fuente, pero no quiero que se eliminen cada vez que hago rsync. Por otro lado, los archivos que solían sincronizarse y luego se eliminaron en la fuente aún deberían eliminarse.
¿Hay alguna manera de hacer esto sin tener que alterar el comando para cada archivo que quiero excluir?
Actualización : debo mencionar que no estoy limitado a rsync. Si otro programa hace el trabajo, también está bien. Solo intenté resolver esto usando rsync.
Respuestas:
rsync
tiene una opción llamada--exclude-from
opción que le permite crear un archivo que contiene una lista de los archivos que desea excluir. Puede actualizar este archivo siempre que desee agregar una nueva exclusión o eliminar una antigua.Si crea el archivo de exclusión en
/home/user/rsync_exclude
el nuevo comando sería:Al crear el archivo de lista de exclusión, debe colocar cada regla de exclusión en una línea separada. Las exclusiones son relativas a su directorio de origen. Si su
/home/user/rsync_exclude
archivo contenía las siguientes opciones:secret_file
en su directorio fuente será excluido.${source_dir}/first_dir/subdir
excluirán todos los archivos , perosubdir
se sincronizará una versión vacía de .${source_dir}/second_dir
con un prefijocommon_name.
será ignorado. Entoncescommon_name.txt
,common_name.jpg
etc.fuente
Como mencionó: no estoy limitado a rsync:
Script para mantener el espejo, lo que permite agregar archivos adicionales al destino
Debajo de un script que hace exactamente lo que usted describe.
La secuencia de comandos se puede ejecutar en modo detallado (que se establecerá en la secuencia de comandos), lo que generará el progreso de la copia de seguridad (reflejo). No es necesario decir que esto también se puede usar para registrar las copias de seguridad:
Opción detallada
El concepto
1. En la primera copia de seguridad, el script:
.recentfiles
2. En el siguiente y así sucesivamente copia de seguridad
.currentfiles
..recentfiles
se compara (enumerando la situación en la copia de seguridad anterior).currentfiles
. Obviamente, solo los archivos de los.recentfiles
que no.currentfiles
están se eliminan del origen y se eliminarán del destino..currentfiles
se renombra para.recentfiles
servir el próximo ciclo de copia de seguridad y así sucesivamente.La secuencia de comandos
Cómo utilizar
backup_special.py
Cambie, si lo desea, la opción detallada en el encabezado del script:
Ejecútelo con fuente y destino como argumentos:
Velocidad
Probé el script en un directorio de 10 GB con unos 40,000 archivos y directorios en mi unidad de red (NAS), hizo la copia de seguridad casi al mismo tiempo que rsync.
La actualización de todo el directorio tomó solo unos segundos más que rsync, en 40,000 archivos, lo cual es bastante aceptable y no sorprende, ya que el script necesita comparar el contenido con la última copia de seguridad realizada.
fuente