實現一個檔案夾同步的shell指令碼
演算法:
1.先find /pathname -print >filea #擷取兩個檔案夾裡所有檔案的全名。<br />2.比較檔案,先刪去要同步的檔案夾裡多餘的檔案。接著重新獲得需要同步的檔案夾裡所有檔案的全名。<br />3.比較檔案,把源檔案夾裡增加的檔案CP到要同步的檔案夾中。<br />
這個指令碼是同步/share目錄裡的所有檔案,需要備份到/mnt/d/share
#!/bin/bash</p><p>mount /dev/hda6 /mnt/d 2>/dev/null ; unalias rm cp<br />rm /share/c/app/*o /share/c/tmp/*o /share/c/app/*core /share/c/tmp/*core /share/c/app/a.out /share/c/tmp/a.out<br />find /share -print >/tmp/.share_ #把/share的所有檔案的全名儲存到/tmp/.share_</p><p>find /mnt/d/share -print |sed 's///mnt//d//g' >/tmp/.d_<br />chmod 700 /tmp/.share_ /tmp/.d_<br />count=0<br />for i in $(comm -23 /tmp/.d_ /tmp/.share_) ; do #比較兩個檔案裡/tmp.d_ 與/tmp./share_的不同。</p><p>echo "/mnt/d$i"<br />rm "/mnt/d$i" ; count=$((count+1)) #刪除/mnt/d/share/*裡的多餘的檔案和計數。</p><p>done #for command ;do command ; done的迴圈到此結束。</p><p>echo "del $count file at /mnt/d/share/"<br />find /mnt/d/share -print |sed 's///mnt//d//g' >/tmp/.d_ ; count=0 #重新獲得檔案的全名。初始化計數器。</p><p>for i in $(comm -23 /tmp/.share_ /tmp/.d_) ; do<br />echo $i<br />cp $i "/mnt/d$i" ; count=$((count+1)) #備份/share裡新增加的檔案到/mnt/d/share,同時計數。</p><p>done<br />echo "already copied $count file from /share to /mnt/d/share " ;sync<br />umount /mnt/d 2>/dev/null<br />echo done</p><p>