2012-03-19 22 views
35

Tengo un archivo de texto que contiene la lista de archivos y directorios que quiero copiar (uno en una línea). Ahora quiero que rsync tome esta entrada de mi archivo de texto y la sincronice con el destino que proporciono.leer la entrada desde un archivo y sincronizar en consecuencia

He intentado jugar con "--include-from=FILE" y "--file-from=FILE" opciones de rsync, pero simplemente no está funcionando

También probé antes de la fijación de "+" en cada línea en mi archivo, pero todavía no está funcionando.

He intentado venir con varios PATENTES de filtro como se describe en la página man de rsync, pero todavía no está funcionando.

Podría alguien proporcionarme la sintaxis correcta para este caso de uso. He probado las cosas anteriores en Fedora 15, RHEL 6.2 y Ubuntu 10.04 y ninguna funcionó. Entonces definitivamente me estoy perdiendo algo.

Muchas gracias.

+1

Usted debe realmente sólo publicar sus comandos exactos que se han probado. – jdi

+3

Buena pregunta, pero en realidad no está relacionada con la programación, probablemente pertenece al Superusuario o al Servidor, no al Desbordamiento de pila. –

Respuesta

68

Hay más de una forma de responder esta pregunta dependiendo de cómo quiera copiar estos archivos. Si su intención es copiar la lista de archivos con rutas absolutas, entonces podría ser algo como:

rsync -av --files-from=/path/to/files.txt//destination/path/

... Este esperaría que los caminos que es relativa a la ubicación de origen de / y conservaría la toda la estructura absoluta bajo ese destino.

Si su objetivo es copiar todos los archivos de la lista para el destino, y no posee ningún tipo de jerarquía de ruta (sólo una colección de archivos), entonces se podría probar uno de los siguientes:

# note this method might break if your file it too long and 
# exceed the maximum arg limit 
rsync -av `cat /path/to/file` /destination/ 

# or get fancy with xargs to batch 200 of your items at a time 
# with multiple calls to rsync 
cat /path/to/file | xargs -n 200 -J % rsync -av % /destination/ 

O un ciclo for y copiar:

# bash shell 
for f in `cat /path/to/files.txt`; do cp $f /dest/; done 
+0

jdi, gracias por la información. Lo tendré a mano para mi uso futuro. – slayedbylucifer

+0

Sin embargo, tengo uso rsync para mi caso de uso. – slayedbylucifer

+0

¿Estás diciendo que esto no respondió tu pregunta? – jdi

4

Dado un listado de archivos $ HOME/GET/bringemback contiene

**need/A 
alsoneed/B 
shouldget/C** 

cd $ HOME/GET

plazo

rsync -av --files-from=./bringemback [email protected]:. $HOME/GET/collect 

obtendría los archivos y soltarlos en $HOME/GET/collect

$HOME/GET/ 
      collect/ 
        need/A 
        alsoneed/B 
        shouldget/C 

o al menos eso creo.

útiles

+3

Solo una corrección la opción debería ser '' '--files-from =' '' y no '' '--- from-files'''. Entonces el ejemplo corregido: '' 'rsync -av --files-from =./Bringemback me @ theremote :. $ HOME/GET/collect''' – jeffchan

2

rsync soporta de forma nativa:

rsync --recursive -av --files-from=/path/to/files.txt//destination/path/

Cuestiones relacionadas