Теме: програмирање | Рачунари

BAT скрипт за брзи бекап

Скраћена веза: https://pedja.supurovic.net/veza/5259

Прављење резервних копија кода на коме радим ми је увек правило главобољу. Ма колико да је то неопходно, редовно ми се дешава да направим копију у неком битном моменту.

Након последње компликације коју сам имао зато што нисам имао одговарајућу копију, одлучио сам да се тим питањем мало озбиљније позабавим. Пробао сам неколико програма за ту намену, и углавном закључио да то мени не ради посао.

Главни проблем је што треба да се сетим да покренем поступак копирања, а затим и да то заиста и учиним, покретањем одговарајућег програма.

Пошто, додуше мало необично за данашње време, највише времена и даље радим у командном прозору (да, на Windows-у) , чак и када радим на веб пројектима, смислио сам прилично брзо и ефикасно решење. Направио сам backup.bat датотеку која ће ми сама копирати све што је потребно. То се показало и најефикасије, јер мије процедура за копирања увек при руци па је заиста често и обављам (чак сам почео и да претерујем у томе, ако је уопште могуће претерати).

Приликом прављења бат датотеке појавио се само један проблем: како сваку копију снимити у засебан директоријум, да би се сачувале и претходне копије. Пошто је бат програмски језик ограничен, нисам баш лако нашао решење.

Основна идеја је да се име директоријума сачини на осниву тренутног датума и врмена, али се показало да је то поприличан залогај, јер бат не уме баш добро да ради са датумским подацима, а нарочито проблеме је што датум и време које бат датотеке види зависе од форматирања које је подешено на рачунару.

На Интерету сам налазио разне покушаје да се овај проблем превазиђе, али нико није успео да у потпуности савлада све начине форматирања датума и времена које је могуће подесити.

Али ја не бих био ја да не решим нерешиво. Ха!

У ствари је решење просто када се утврде стварне потребе. Наиме, сви су ишли логиком да треба испарсирати појединачне податке: годину, месец, дан, сат, минут, секунд… па онда те појединачне податке саставити у одговарајући назив за директоријум или датотеку. Парсирање је проблематично, јер умногоме зависи од формата приказа датума и времена.

Но, мени је, у ствари, најважније било само то да добијем јединствено име директоријума, а то да ли ће из њега бити читки датум и време, је неважно. Тако сам дошао на идеју да у ствари не парсирам податке, него само да из њих избацим оне знакове који су недозвољени у имену датотеке. Тако очишћени, могу се без проблема применити.

И ево датотеке backup.bat која ради бекап:

SET _date=%date%-%time%
SET _tmp=%_date:.=%
SET _tmp=%_tmp::=%
SET _tmp=%_tmp:/=%
SET _date=%_tmp%

XCOPY *.* "x:\mojprojekat-%_date%\" /y /f /r /s

Када подешавам ову датотеку да прави резервне копије за неки други пројекат само изменим у параметрима команде XCOPY део који означава путању где треба да се копија снима. У овом примеру то је x:\mojprojekat.

Ово није неко фенси решење, и прилично је примитивно, али мени боље не треба, а временом се показало као прилично ефикасно и корисно.  Можда још некоме буде помогло.

Има ли шта боље?

Наравно да има боље. Од разних могућих комплетних решења за чување копија препоручујем употребу сервера сорса, и то најпре SVN Server. Захтева мало више подешавања да се ствар постави на ноге, али када то једном наместите бићете одушевљени колико је то практична и функционална ствар.

Када ухватим времена, о томе ћу посебно писати. Зато, проверавајте мој блог с времена на време.


Поделите овај чланак са пријатељима


11 comments to BAT скрипт за брзи бекап

  • Danilo

    Svatam da malo promašujem temu, ali prosto moram.. 🙂 Ovo jeste BRZO rešenje. Versioning sistemi su PRAVO rešenje. Kada se savlada početak (koji nije nimalo težak), prosto nema nazad – ne zato što nije moguć, nego zato što nikome ko je probao neće pasti na pamet. 🙂

    U poslednje vreme dosta koristim Git i daleko je jednostavniji od Subversion-a (SVN) za lokalni/single developer razvoj jer ne zahteva server, njegov setup, niti komunikaciju sa istim (to je svakako moguće ako ima potrebe) već se ceo repozitorijum čuva na lokalnoj mašini.

    Mada, nisam siguran kako Git funkcioniše u Windows okruženju. U Linuxu se koristi kao skup alata iz komandne linije, a postoje i neka grafička okruženja. Ono što je sigurno je da popularnija razvojna okruženja (IDE) već imaju ili postepeno dobijaju podršku za Git.

  • Lajna

    Za neke fajlove/foldere koristim Dropbox. Tako dobijam i sinronizaciju tih fajlova izmedju vise racunara.
    Basic plan je free, i 2GB prostora je slobodno za koriscenje.
    pozz

    • Dropbox захтева интернет везу и ради синхронизацију након сваке измене. Није то баш згодно када се ради неки развој програма.

  • Ако моја 2 еуроцента помажу, за изворни код је најбоље користити неки од модерних система за управљање верзијама — гит или меркуријал (Mercurial, hg). Гит ради под виндовсом, али мало неочекивано тако да је меркуријал вероватно боље решење.

    СВН не ваља користити зато што има фаталне мане, попут невођења рачуна о историјату стапања (merge). Да се разумемо, док није постојало ништа боље, СВН је био у реду, али данас су доступни бољи алати (видети под: гит), па треба користити њих. Детаљи: http://www.youtube.com/watch?v=4XpnKHJAok8

    • holodoc

      SVN vodi računa o istoriji stapanja (merge) samo na malo drugačiji način od ostalih sistema za verzionisanje. Za pregled kompletne istorije grane (branch) uključujući i istoriju stapanja dovoljno je navesti parametar „–use-merge-history“ parametar (kraća verzija „-g“) tokom pregleda SVN loga te grane.

      • Добра ствар живота у модерним временима је да данас постоје добри алати који премошћују између различитих система за верзије.

        Довољно сам комотан са гитом да га користим искључиво у раду, а ако треба да шаљем код у складишта која нису гит, користим мост гит->штагод (од њих, гит->свн је посебно добро урађен!), тако да што се мене тиче свако у тиму може да изабере алат који му највише одоговара.

        Додуше, лично не разумем фиксацију на свн, али то неразумевање је срећом само мој проблем. 🙂

  • holodoc

    Iz mog ličnog iskustva najbolja varijanta za skladištenje projekata jeste kombinacija sistema za verzionisanje i posebnog servera (računara) koji se nalazi u istoj mreži kao i razvojna mašina.

    U kućnim uslovima dovoljno je imati jedan zaseban računar u mreži na kome je instaliran neki enteprise-level distro tipa CentOS sa svim neophodnim serverima tipa svnserve, Apache, MySQL itd. Prednost ovakvog pristupa je što se backupovani podaci, posebno oni kroz SVN, skladište na zasebnoj mašini i potpuno su nezavisni od računara na kojima se projekti razvijaju.

    U slučaju da ne postoji mogućnost za uvođenje dodatne zasebne mašine VirtualBox je odlična zamena.

    Što se tiče rasprave oko sistema za verzionisanje tu zaista ne postoje čvrsta pravila i svako će hvaliti svog konja. Ja lično preferiram SVN nad ostalim sistemima iz jednostavnog razloga što je dovoljno dobar za razvoj u malim grupama i što se bolje snalazi sa binarnim podacima prilikom commit-ova. Takođe SVN je i dalje daleko bolje podržan u razvojnim okruženjima i specijalnim namenskim aplikacijama koje se koriste za organizaciju projekta (tipa activeCollab i sl.)

    • +1 за посебан рачунар.

      Моја 2 цента у вези са остатком сетапа:
      – за овакве ствари не верујем виртуалбоксу. Не желим да се нађем у ситуацији да се нешто поквари и да онда не могу да избавим податке из диска виртуелне машине. Физичка машина и физички дискови су ипак права ствар, дати пар стотина € за то није много.

      – такође, бирам да сви развојни рачунари имају инсталиран *исти* ОС ако је могуће, чак и по цену да сервери за одлагање података врте нешто што није нужно окарактерисано као серверска дистрибуција/ос.

  • Sokobanja

    U potpunosti se slazem sa filmil-om. Mislim da ono sto se nekad cini kao jeftinije resenje, moze na kraju biti skuplje. Zato nikad nije skupo platiti nesto od cega zavisimo

Leave a Reply

 

 

 

You can use these HTML tags

<a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <s> <strike> <strong>

Попуните израз тако да буде тачан: *