我有一个按日期列出的目录结构:
2014/01/01
2014/01/02
...
2014/01/31
2014/02/01
...
我每天都会创建新的目录和文件,我需要将它们从一台机器rsync到另一台机器。但是如果rsync由于某种原因而死亡,我需要在之后的文件之前传输,因此日期中没有差距。有没有办法让rsync做到这一点,还是有一些工具而不是rsync更适合这份工作?
答案 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