Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

read input from a file and sync accordingly

Tags:

rsync

I have a text file which contains the list of files and directories that I want to copy (one on a line). Now I want rsync to take this input from my text file and sync it to the destination that I provide.

I've tried playing around with "--include-from=FILE" and "--file-from=FILE" options of rsync but it is just not working

I also tried pre-fixing "+" on each line in my file but still it is not working.

I have tried coming with various filter PATTERNs as outlined in the rsync man page but it is still not working.

Could someone provide me correct syntax for this use case. I've tried above things on Fedora 15, RHEL 6.2 and Ubuntu 10.04 and none worked. So i am definitely missing something.

Many thanks.

like image 860
slayedbylucifer Avatar asked Mar 19 '12 07:03

slayedbylucifer


1 Answers

There is more than one way to answer this question depending on how you want to copy these files. If your intent is to copy the file list with absolute paths, then it might look something like:

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

...This would expect the paths to be relative to the source location of / and would retain the entire absolute structure under that destination.

If your goal is to copy all of those files in the list to the destination, without preserving any kind of path hierarchy (just a collection of files), then you could try one of the following:

# 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/ 

Or a for-loop and copy:

# bash shell for f in `cat /path/to/files.txt`; do cp $f /dest/; done 
like image 167
jdi Avatar answered Oct 09 '22 12:10

jdi