/* (gH) -- sovotf.rex ; TimeStamp (unix) : 26 Octobre 01 15:24 */ /***************************************************************/ /* */ /* sovot.rex - (gH) 2000 : */ /* */ /* +================================================+ */ /* + + */ /* + sauvegarde automatique des fichiers + */ /* + + */ /* +================================================+ */ /* */ /* */ /* testé avec - qrexx */ /* - /opt/Xed/srexx */ /* - /opt/Xed/regina */ /* */ /* syntaxe sovot [-zip] */ /* */ /***************************************************************/ /* */ /* Auteur */ /* */ /* gilles.hunault@univ-angers.fr */ /* */ /* http://www.info.univ-angers.fr/pub/gh/ */ /***************************************************************/ /* */ /* détection de l'Os et de la machine */ tabLet. = "Z" s1 = "unika" s2 = "afone" s3 = "sirius" tabLet.s1 = "U" tabLet.s2 = "A" tabLet.s3 = "S" lprec.s1 = "/home/gh/Tmp/" lprec.s2 = "/home/afone/gh/Tmp/" lprec.s3 = "/home/info/gh/Tmp/" lieu = "???" pathOs = value("PATH",,"SYSTEM") if pos("/home/gh",pathOs)>0 then lieu = "unika" if pos("/home/afone/",pathOs)>0 then lieu = "afone" if pos("vega",pathOs)>0 then lieu = "sirius" if pos("/home/info",pathOs)>0 then lieu = "sirius" /* say " " pathOs say " lieu : " lieu */ letI = tabLet.lieu lprecI = lprec.lieu parse arg nbjour leRep stopSov if words(nbjour) = 0 then do say say " sovotf (gH) 2000 ; sauvegarde automatique dans /tmp" say say " syntaxe : sovotf [ nb_jours [ rep ] stop | -a ]" say " exemples : sovotf 1 " say " sovotf 7 ~/Crs/Stat" say " sovotf 7 ~/Crs/Stat stop" say " sovotf -a " say say "en principe, ~/Tmp/lastsov.dates contient la date de " say "la sauvegarde précédente et le fichier ~/Bin/sovotf.dates" say "contient toutes les dates de sauvegardes." say exit 0 end if words(leRep)=0 then leRep = "~" /* préparation des noms de fichier(s) */ ladet = date("E") jecou = date("D") fjour = letI||substr(ladet,7,2)"_"substr(ladet,4,2)"_"substr(ladet,1,2) fjour = letI||"_"substr(ladet,4,2)"_"substr(ladet,1,2) nsov = "/tmp/"fjour".zip" ndf = "/tmp/"fjour".tmp" nds = "/tmp/"fjour".lst" ndl = "/tmp/"fjour".lif" /* say " lieu " lieu */ if lieu="unika" then lDat = "/home/gh/Bin/sovotf.dates" else lDat = "/home/info/gh/Bin/sovotf.dates" nprec = lprecI||"lastsov.dates" do while lines(nprec)>0 dlastSov = linein(nprec) end call lineout nprec rf = stream(nprec,'command','close') do while lines(lDat)>0 dlastSovBin = linein(lDat) end call lineout lDat rf = stream(lDat,'command','close') say " Voici ce que j'ai lu dans " lDat say say " " dlastSovBin if words(dlastSovBin)<4 then do lastSov = "(inconnue)" nbecoul = " ??? " end ; else ; do lastDate = word(dlastSovBin,3) lastEcou = word(dlastSovBin,4) lastSov = lastDate " jour " lastEcou nbecoul = jecou - lastEcou if nbecoul <0 then do nbecoul = 366 + nbecoul end end say say " Sauvegarde des fichiers au " ladet " jour " jecou say " Date de dernière sauvegarde : " lastSov say " soit il y a " nbecoul " jour(s) (d'après "nprec")" say " sauvegarde dans " nsov " liste dans " ndf say if nbjour = "-a" then do nbjour = nbecoul + 1 say " Exécution en mode automatique pour " nbjour " jours." end say " avez-vous exécuté 'nocache' et 'nobakr' ? " say say call charout , " -- Appuyer sur Enter pour valider " pull repVali if length(repVali)>0 then do say " donc j'arrête ! (enter seul pour valider)" exit end say "\rm -f " ndf " 2>> /dev/null" cmd = " ( find " lerep " -mtime -"||nbjour " > " ndf ")" /* say cmd */ cmd call lineout ndf rf = stream(ndf,'command','close') nbf = 0 do while lines(ndf)>0 l = linein(ndf) nbf = nbf + 1 end call lineout ndf rf = stream(ndf,'command','close') if words(stopSov) > 0 then do say " il y a " nbf " fichier(s) à sauvegarder ; leur liste est dans : " ndf say exit 0 end "\rm -f " nds " 2> /dev/null " call lineout nds , "Sauvegarde des fichiers de " lerep "au " ladet " jour " jecou nf = 0 ncop = 0 if nbjour >0 then do ; do while lines(ndf)>0 lig = linein(ndf) nf = nf + 1 msg = format(nf,5) " / " nbf " : " substr(lig copies(" ",50),1,55) lon = length(lig) acted = "?" cmd = "?" bad = 0 if lon = 0 then do ; bad = 1 ; cmd = "" ; end if lig = "." then do ; bad = 1 ; cmd = "" ; end if lon > 1 then do bad = 0 /* pas de temporaire créé par sedit ou emacs */ bad = bad + 1*(substr(lig,lon,1) = "%") bad = bad + 2*(substr(lig,lon,1) = "~") bad = bad + 2*(substr(lig,lon,1) = ".") /* pas de nom de répertoire */ bad = bad + 4*(substr(lig,lon,1) ="/") /* pas de fichier dans le répertoire cache de netscape */ las = lastpos(".netscape/cache/",lig) bad = bad + 8*(las >0) bad = bad + 16*(substr(lig,1,11) = "./.netscape") laz = lastpos(".netscape/",lig) bad = bad + 16*(laz>0) laz = lastpos(".kde/",lig) bad = bad + 16*(laz>0) laz = lastpos(".kss-install",lig) bad = bad + 16*(laz>0) laz = lastpos(".IglooFTP/",lig) bad = bad + 16*(laz>0) laz = lastpos(".openoffice.org2/",lig) bad = bad + 16*(laz>0) laz = lastpos(".siag/",lig) bad = bad + 16*(laz>0) laz = lastpos("/.x",lig) bad = bad + 16*(laz>0) laz = lastpos("/.cd",lig) bad = bad + 16*(laz>0) laz = lastpos("/M__",lig) bad = bad + 16*(laz>0) laz = lastpos("/A__",lig) bad = bad + 16*(laz>0) laz = lastpos("/S__",lig) bad = bad + 16*(laz>0) laz = lastpos("/.mozilla",lig) bad = bad + 16*(laz>0) laz = lastpos("/.fullcircle",lig) bad = bad + 16*(laz>0) laz = lastpos("/.java",lig) bad = bad + 16*(laz>0) laz = lastpos("/.DCOPserver",lig) bad = bad + 16*(laz>0) laz = lastpos("/Tmp/orbit-gh",lig) bad = bad + 16*(laz>0) /* pas de fichier temporaire de LaTex */ if lon>4 then do bad = bad + 32*(substr(lig,lon-3,4) = ".aux") bad = bad + 64*(substr(lig,lon-3,4) = ".log") bad = bad + 128*(substr(lig,lon-2,3) = ".ps") /* pas de fichier compressé */ bad = bad + 256*(substr(lig,lon-2,3) = ".gz") bad = bad + 256*(substr(lig,lon-3,4) = ".tgz") bad = bad + 256*(substr(lig,lon-3,4) = ".zip") bad = bad + 256*(substr(lig,lon-3,4) = ".ZIP") /* pas de fichier image rle */ bad = bad + 512*(substr(lig,lon-3,4) = ".rle") /* pas de fichier image dsk pour vmware */ bad = bad + 512*(substr(lig,lon-3,4) = ".dsk") end /* pas de fichier dans tmp/ledf */ bad = bad + 1024*(substr(lig,1,9) = "./tmp/ldf") bad = bad + 1024*(substr(lig,1,9) = "./Tmp/ldf") f2z = substr(lig,3,lon-2) /* pas de temporaire de netscape */ bad = bad + 2048*(substr(lig,1,18) = "./.netscape/cache/") if bad=0 then acted = "à copier" ; else ; acted = " à ignorer " bad end /* fin sur lon > 1 */ msg = msg acted if acted="à copier" then do call lineout ndl , lig ncop = ncop + 1 msg = msg format(ncop,5) end /* say msg */ call lineout nds , msg if bad=0 then do say msg /* if lon>1 then do say " " cmd call lineout , lig " ** ? " pull . end cmd */ end /* fin sur bad = 0 */ end /* fin de tant que */ call lineout ndf rf = stream(ndf,'command','close') call lineout nds rf = stream(nds,'command','close') call lineout ndl rf = stream(ndl,'command','close') /* on effectue le zippage avec la liste de fichiers */ cmd = "zip -q -u " nsov " -@ < " ndl say cmd cmd /* en fin de programme, on met le fichier des dates à jour */ if lieu="unika" then " echo Unika " lerep ladet jecou " >> " lDat else " echo Sirius " lerep ladet jecou " >> " lDat call lineout lDat say say " n'oubliez pas de recopier " nsov", " lDat " et " nds say if lieu="unika" then "cp " substr(nsov,1,11)"*" "/home/gh/Archives/" else "cp " substr(nsov,1,11)"*" "/home/info/gh/Archives/" end "ls -al" substr(nsov,1,11)"*" say /* -- fin de sovotf.rex */