如何使用bash代码同步两个目录?

时间:2013-11-07 14:49:52

标签: bash .bash-profile

任何人都可以帮我用bash代码而不是shell命令,让两个文件夹同步,这是我试过的,我需要用这个代码同步d1目录和d2,但是这个代码我只是得到了d1中第一个要在d2中复制而没有文件其余部分的文件,以及在bash文件中重写此代码以使d2与d1同步的最佳方法是什么, 我需要解决我的问题使用bash代码而不是shell命令所以请帮助我的代码并指导我解决我的问题

#! /斌/庆典

di1=$(ls d1)


n=${#di1[@]}


for (( i = 1; i <$n+1 ; i++ )); do

      t=$(find d2 -name ${di1[$i]})

    if [[ $t = '' ]]; then

     cp d1/${di1[$i]} d2

    fi

 done

2 个答案:

答案 0 :(得分:3)

rsync -avzh /tmp/src /tmp/dst/

答案 1 :(得分:0)

让我试试,我们需要明确说明同步意味着什么:

假设你有两个目的

d1
 L f1 10/25 11:40
 L f2 10/25 10:22
 L f4 10/10 08:01
d2
 L f1 10/25 10:11
 L f2 10/26 09:56
 L f3 10/24 11:37

其中d#是一个目录,f#是一个文件(#表示任何一个数字,如果你还没想到的话),用他们的时间戳表示MM / DD hh:mm。

所以你想把f4复制到d2,将f3复制到d1(直到这里才覆盖),然后用d1 / f1复制(并覆盖)d2 / f1,用d2 / f2复制(和覆盖)d1 / f2。

然后你最终会得到:

d1
 L f1 10/25 11:40
 L f2 10/26 09:56
 L f3 10/24 11:37
 L f4 10/10 08:01
d2
 L f1 10/25 11:40
 L f2 10/26 09:56
 L f3 10/24 11:37
 L f4 10/10 08:01

好吧,直到现在我所做的一切都是改写你的问题,以确保它能以一种我可以回答它的方式,所以如果还有人在阅读它,那么解决方案可能就像:

以两个方向更新现有文件

cp -ur d1 d2
cp -ur d2 d1

就是这样。