我有一个文本文件,其中包含我要复制的文件和目录列表(一行中有一个)。现在我希望rsync从我的文本文件中获取此输入并将其同步到我提供的目标。
我尝试过使用rsync的"--include-from=FILE"
和"--file-from=FILE"
选项,但它只是无法正常工作
我还尝试在我的文件中的每一行预先修复"+"
,但它仍无效。
我已尝试使用rsync手册页中概述的各种过滤器PATTERN,但它仍无效。
有人可以为这个用例提供正确的语法。我已经在Fedora 15,RHEL 6.2和Ubuntu 10.04上尝试过上面的东西,但没有一个工作。所以我肯定错过了一些东西。
非常感谢。
答案 0 :(得分:69)
根据您要复制这些文件的方式,有多种方法可以回答此问题。如果您的目的是使用绝对路径复制文件列表,那么它可能类似于:
rsync -av --files-from=/path/to/files.txt / /destination/path/
...这会使路径相对于/
的源位置,并保留该目的地下的整个绝对结构。
如果您的目标是将列表中的所有文件复制到目标,而不保留任何类型的路径层次结构(只是文件集合),那么您可以尝试以下方法之一:
# 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/
或for-loop和copy:
# bash shell
for f in `cat /path/to/files.txt`; do cp $f /dest/; done
答案 1 :(得分:6)
给出一个文件列表 $ HOME / GET / bringemback 包含
**need/A
alsoneed/B
shouldget/C**
cd $ HOME / GET
运行
rsync -av --files-from=./bringemback me@theremote:. $HOME/GET/collect
会获取文件并将其放入$HOME/GET/collect
$HOME/GET/
collect/
need/A
alsoneed/B
shouldget/C
左右我相信。
有帮助
答案 2 :(得分:4)
rsync原生支持:
rsync --recursive -av --files-from=/path/to/files.txt / /destination/path/