rsync of file list
hashproduct at verizon.net
Sun Jan 15 15:56:31 GMT 2006
On Sun, 2006-01-15 at 09:15 +0200, Mark, Oren wrote:
> Can I do it one single rsync command, giving a file containing list of
> paths as parameter, or do I need to run rsync for each file.
It looks like this is what you need.
Using this option allows you to specify the exact list of files
to transfer (as read from the specified FILE or "-" for standard
input). It also tweaks the default behavior of rsync to make
transferring just the specified files and directories easier:
o The --relative (-R) option is implied, which preserves
the path information that is specified for each item in
the file (use --no-relative if you want to turn that
o The --dirs (-d) option is implied, which will create
directories specified in the list on the destination
rather than noisily skipping them.
o The --archive (-a) option´s behavior does not imply
--recursive (-r), so specify it explicitly, if you want
The file names that are read from the FILE are all relative to
the source dir -- any leading slashes are removed and no ".."
references are allowed to go higher than the source dir. For
example, take this command:
rsync -a --files-from=/tmp/foo /usr remote:/backup
If /tmp/foo contains the string "bin" (or even "/bin"), the
/usr/bin directory will be created as /backup/bin on the remote
host. If it contains "bin/" (note the trailing slash), the
immediate contents of the directory would also be sent (without
needing to be explicitly mentioned in the file -- this began in
version 2.6.4). In both cases, if the -r option was enabled,
that dir´s entire hierarchy would also be transferred (keep in
mind that -r needs to be specified explicitly with --files-from,
since it is not implied by -a). Also note that the effect of
the (enabled by default) --relative option is to duplicate only
the path info that is read from the file -- it does not force
the duplication of the source-spec path (/usr in this case).
In addition, the --files-from file can be read from the remote
host instead of the local host if you specify a "host:" in front
of the file (the host must match one end of the transfer). As a
short-cut, you can specify just a prefix of ":" to mean "use the
remote end of the transfer". For example:
rsync -a --files-from=:/path/file-list src:/ /tmp/copy
This would copy all the files specified in the /path/file-list
file that was located on the remote "src" host.
Now, here's something I'm wondering: is there a way, given a list of
unrelated (source, destination) pairs, to copy each source to the
corresponding destination in a single run of rsync?
Matt McCutchen, ``hashproduct''
hashproduct at verizon.net -- http://mysite.verizon.net/hashproduct/
More information about the rsync