Rsync solo archivos de un usuario específico

Rsync solo archivos de un usuario específico

¿Hay alguna manera de sincronizar solo archivos de un determinado usuario? Tengo una carpeta que contiene archivos de varios usuarios, pero solo me gustaría hacer una copia de seguridad de los archivos de un usuario en particular.

He mirado las páginas de manual de rsync pero no parece haber tal indicador.

¿Algunas ideas?

Respuesta1

No, no hay forma de seleccionar, directamente desde la línea de comando rsync, los archivos de un usuario específico.

Sin embargo, es muy fácil generar una lista de estos archivos, por ejemplo con un comando como

   find /src/directory -type f -exec ls -lh {} \; | awk '{if ($3 == "your_name") for (i=1; i<=NF-8; i++) $i = $(i+8); NF-=8; print}'

findencuentra todos los archivos en el árbol debajo del directorio /src/ e imprime una lista larga que incluye al propietario, luego pasa estas listas a awk, que selecciona aquellos que le pertenecen ("su_nombre") y luego, solo para estos, imprime la ruta completa. La construcción extraña que comienza con forse debe al hecho de que algunos de los nombres de archivos pueden incluir un espacio, por lo que esta construcción imprime todos los tokens ( i.e., todas las secuencias de caracteres delimitadas por espacios) desde la novena columna en adelante (los nombres de archivos pueden incluir un número arbitrario de espacios). Además, esta construcción garantiza que permanezca en una sola línea.

Puede redirigir esta salida a un archivo y luego usar rsync solo en los archivos enumerados en este archivo.

Respuesta2

-rw-r--r--La respuesta de MariusMatutiae no funcionó para mí: solo obtuve muchas líneas.

Entonces desarrollé esta respuesta:

  1. El findcomando tiene la opción -user(y -group) que es mucho más fácil de usar. Necesitamos rutas/nombres de archivos relativos:
    a) findopción: -printf '%P\n'o
    b) canalizaciónsed -e "s#/path##"
  2. rsync ofrece la posibilidad de sincronizar desde archivos: . Necesita este archivo local. Por lo tanto, debe presionar rsync los archivos, o el servidor que los extrae debe obtenerlos primero desde el lado remoto donde se generó la lista anteriormente.--files-from=FILE

=> Para mi ejemplo, esto funciona:
1a) find /usr/share/piwik/ -user www-data -printf '%P\n' > /tmp/find-piwik-rsync.listo
1b)find /usr/share/piwik/ -user www-data | sed -e "s#/usr/share/piwik/##" > /tmp/find-piwik-rsync.list

2)rsync -a --files-from=/tmp/find-piwik-rsync.list /usr/share/piwik/ remote:/usr/share/piwik

Primero deberías probarlo con -n/ --dry-run.

información relacionada