如何按时间顺序制作rsync传输文件?

时间:2014-03-18 04:24:50

标签: shell rsync

我有一个按日期列出的目录结构:

2014/01/01
2014/01/02
...
2014/01/31
2014/02/01
...

我每天都会创建新的目录和文件,我需要将它们从一台机器rsync到另一台机器。但是如果rsync由于某种原因而死亡,我需要在之后的文件之前传输,因此日期中没有差距。有没有办法让rsync做到这一点,还是有一些工具而不是rsync更适合这份工作?

2 个答案:

答案 0 :(得分:0)

使用shell循环尝试rsync将各个目录添加到远程主机上各自的目标位置:

for x in */*/*; do rsync <options> $x user@host:/path/to/$x  ; done

*/*/*模式与2014/01/01之类的路径组件匹配。 Glob扩展已排序。

当然,我们需要对rsync命令死亡的情况进行一些错误检查:这样做的全部原因。循环可以多次重试失败的rsync,然后放弃或类似的东西。

答案 1 :(得分:-1)

从基本的东西开始,可能是这样的:

ls -1t | while read ff ; do echo "$ff" ; echo ; done

这将按逆时间顺序(最新的第一个)顺序处理文件。按时间顺序(最早的)ls -1rt运行它。

但是你的问题似乎意味着像

这样的文件夹结构
2014/
    01/
        01/
            ...
        02/
        ...
        31/
    02/
        01/
        02/
        ..
        28/
    03/
        01/
        02/
        ..
        31/
    04/
        01/

所以你需要:

ls -1trd ????/??/??/ | while read ff ; do if [ -d "$ff" ] ; then echo "$ff" ; echo ; fi ; done

如果您希望更深入地进行小时划分,那么ls -1trd ????/??/??/将成为ls -1trd ????/??/??/??/

最终使用echo "$ff"命令替换rsync,但使用此命令作为干运行检查订单。根据你的结构,我不确定引号是否过于重要但是我一直试着使用它,因为当你处理带有空格的文件名时,它绝对是 重要。我有我自己也犯了这么多次犯规。

注意:命令是ls -1,即数字1,而不是字母el