2012-03-19 9 views
35

Ho un file di testo che contiene l'elenco di file e directory che voglio copiare (uno su una riga). Ora voglio rsync per prendere questo input dal mio file di testo e sincronizzarlo con la destinazione che fornisco.legge l'input da un file e sincronizza di conseguenza

Ho provato a giocare con "--include-from=FILE" e "--file-from=FILE" opzioni di rsync, ma non è solo lavorando

Ho anche provato pre-fissaggio "+" in ogni riga nel mio file, ma ancora non funziona.

Ho provato a venire con vari PATTERN filtro come indicato nella pagina man rsync ma non funziona ancora.

Qualcuno potrebbe fornirmi la sintassi corretta per questo caso d'uso. Ho provato sopra cose su Fedora 15, RHEL 6.2 e Ubuntu 10.04 e nessuno ha funzionato. Quindi mi manca sicuramente qualcosa.

Molte grazie.

+1

Si dovrebbe davvero solo inviare i comandi esatti che avete provato. – jdi

+3

Buona domanda, ma non è propriamente legata alla programmazione - probabilmente appartiene a Super User o Server Fault, non Stack Overflow. –

risposta

68

C'è più di un modo per rispondere a questa domanda a seconda di come si desidera copiare questi file. Se il vostro intento è quello di copiare l'elenco dei file con percorsi assoluti, allora potrebbe essere simile:

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

... Ciò si aspettano i percorsi siano relativi alla posizione di origine di / e manterrebbe la tutta la struttura assoluta sotto quella destinazione.

Se il vostro obiettivo è quello di copiare tutti i file nella lista per la destinazione, senza conservare alcun tipo di gerarchia percorso (solo un insieme di file), allora si potrebbe provare una delle seguenti opzioni:

# 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 e copiare:

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

jdi, grazie per l'informazione. Lo terrò a portata di mano per il mio uso futuro. – slayedbylucifer

+0

Tuttavia, ho usato rsync per il mio caso d'uso. – slayedbylucifer

+0

Stai dicendo che questo non ha risposto alla tua domanda? – jdi

4

Dato un elenco di file $ HOME/GET/bringemback contenente

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

cd $ HOME/GET

corsa

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

sarebbe ottenere i file e rilasciarli in $HOME/GET/collect

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

o almeno così credo.

utili

+3

Solo una correzione l'opzione dovrebbe essere '' '--files-from =' '' e non '' '--- from-files'''. Quindi l'esempio corretto: '' 'rsync -av --files-from =./Bringemback me @ theremote :. $ HOME/GET/collect''' – jeffchan

2

rsync supporta in modo nativo:

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

Problemi correlati