从文件读取输入并相应地进行同步

sla*_*fer 36 rsync

我有一个文本文件,其中包含我要复制的文件和目录列表(一行一行).现在我希望rsync从我的文本文件中获取此输入并将其同步到我提供的目标.

我已经尝试过使用"--include-from=FILE""--file-from=FILE"rsync的选项,但它只是无法正常工作

我也尝试"+"在我的文件中的每一行预先修复,但它仍然无法正常工作.

我已尝试使用rsync手册页中概述的各种过滤器PATTERN,但它仍然无法正常工作.

有人可以为这个用例提供正确的语法.我已经在Fedora 15,RHEL 6.2和Ubuntu 10.04上尝试了以上的东西,但没有一个工作.所以我肯定错过了一些东西.

非常感谢.

jdi*_*jdi 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/
Run Code Online (Sandbox Code Playgroud)

或者for循环和复制:

# bash shell
for f in `cat /path/to/files.txt`; do cp $f /dest/; done
Run Code Online (Sandbox Code Playgroud)


小智 6

给出一个包含$ HOME/GET/bringemback的文件

**need/A
alsoneed/B
shouldget/C**
Run Code Online (Sandbox Code Playgroud)

cd $ HOME/GET

rsync -av --files-from=./bringemback me@theremote:. $HOME/GET/collect
Run Code Online (Sandbox Code Playgroud)

将获取文件并将其放入 $HOME/GET/collect

$HOME/GET/
          collect/
                  need/A
                  alsoneed/B
                  shouldget/C
Run Code Online (Sandbox Code Playgroud)

或者我相信.

有帮助

  • 只是一个修正选项应该是```--files-from =```而不是```--- from-files```.所以纠正的例子:```rsync -av --files-from =./ bringemback me @ theremote:.$ HOME/GET/collect``` (3认同)