[singlepic id=21 w=100 h=100 float=left]Wiele osób szuka różnych narzędzi do wykonywania kopii zapasowych, czy też synchronizacji danych i bardzo dobrze – bo każde poszukiwanie powiększa nasz bagaż wiedzy. W poniższym tekście nie chcę ich od tego odwieść, a jedynie przypomnieć o prostym poleceniu XCOPY – jak już się znudzą poszukiwania 🙂
Odpowiadając na tytułowe pytanie – Ci co na co dzień tworzą skrypty wiedzą, że naprawdę wiele.
Przyznam się, że kiedyś nie doceniałem tego polecenia i być może dlatego, że wydawało mi się zbyt proste. Jednak to właśnie one najmniej nas zawodzą, a proste rozwiązania są najlepsze 🙂
O samy poleceniu XCOPY możemy przeczytać uruchamiając tryb „wiersz polecenia” i wpisując xcopy /?. W praktyce, polecenie możemy uzbroić w konkretne przełączniki i zazwyczaj tworzymy plik wsadowy (np. kopia.bat).
W tym prostym poniższym przykładzie kopiowany jest profil użytkownika na np. zmapowany dysk sieciowy lub na Pendrive z literką K w systemie.
@echo off
set zrodlo=”%USERPROFILE%”
set cel=”k:\_kopia_zapasowa_”
set conf=/D /S /V /C /I /H /R /Y /Z /EXCLUDE:kopia.txt
xcopy %zrodlo% %cel% %conf%
Jak widać mamy źródło, cel i conf – przełączniki, w których znajduje się między innymi /EXCLUDE: i odwołanie do pliku kopia.txt. Plik ten tworzymy w tej samej lokalizacji co kopia.bat i zawiera informacje jakich danych nie chcemy kopiować np.:
.bak
.tmp
.temp
~h
Desktop.ini
Thumbs.db
\IECompatCache\
\IETldCache\
\Temp\
\Temporary Internet Files\
Jeżeli wykonujemy sukcesywnie tylko kopię danych to pomocny jest parametr /D, który zaoszczędzi nam trochę czasu, gdyż nie będą kopiowane pliki których data się nie zmieniła na nowszą.
Przełączniki oczywiście dowolnie dobieramy wg uznania i potrzeby.
W przykładzie wykorzystane są:
/D:m-d-r Kopiuje pliki zmienione określonego dnia lub później. Jeśli nie podano daty, kopiuje tylko pliki, dla których czas wersji źródłowej jest późniejszy niż czas wersji docelowej.
/EXCLUDE:plik1[+plik2][+plik3]… Określa listę plików zawierających ciągi. Każdy ciąg powinien być w osobnym wierszu w plikach. Jeżeli jakiś ciąg pasuje do dowolnej części ścieżki absolutnej kopiowanego pliku, plik ten nie zostanie skopiowany. Na przykład, określenie ciągu postaci \obj\ lub .obj spowoduje wyłączenie wszystkich plików w podkatalogu obj lub wszystkich plików z rozszerzeniem .obj.
/S Kopiuje katalogi i podkatalogi, z wyjątkiem pustych.
/V Weryfikuje każdy nowy plik.
/C Kontynuuje kopiowanie nawet po wystąpieniu błędu.
/I Jeśli „cel” nie istnieje i kopiowany jest więcej niż jeden plik, zakłada, że „cel” musi być katalogiem.
/R Zastępuje pliki tylko do odczytu.
/Y Wyłącza monitowanie o potwierdzenie zastąpienia istniejącego pliku docelowego.
/Z Kopiuje pliki w trybie umożliwiającym ponowne uruchomienie.
Cóż, XCOPY jest prostym poleceniem i niedoskonałym w niektórych przypadkach, ale z powodzeniem możemy stosować je w wielu, nawet zaawansowanych skryptach. Należy jednak wiedzieć, że xcopy nie radzi sobie między innymi z plikami o nazwie dłuższej niż 256 znaków.
Można na koniec rzec, że podobnym narzędziem jak xcopy jest dużo sprawniejszy jego brat robocopy, ale to jak zwykle temat kolejnego artykułu.
Kopii nigdy nie za dużo.. choć warto je jakoś oznaczać np. poprzez log z datą.
Zachęcam do zapoznania się i korzystania z dużo bardziej zaawansowanego narzędzia ROBOCOPY, który jest częścią nowych windowsów. Bez niego to już nie ta sama synchronizacja.. 🙂
Pozdrawiam
P.S.
Najprostsza konfiguracja (miroring):
@echo off
set zrodlo="%USERPROFILE%"
set cel="\\Serwer\Backup\%Username%_%COMPUTERNAME%"
if not exist %cel% mkdir %cel%
set log=%cel%\%date%_log.txt
set folder=Temp AppData "3D Objects" "Tracing" "Dane aplikacji" "Ustawienia lokalne" "Temporary Internet Files" NetHood SendTo Szablony UserData
set files=*USER.DAT* *.wab~ *.bak *.wbk ~h*.* ~*.* *.tmp *.temp *.swp backup*.* *usuni*te.dbx desktop.ini Thumbs.db Default.rdp *rzyk*adow*.lnk NTUSER.DAT ntuser.ini ntuser.dat.LOG ntuser.pol Sti_Trace.log sqlprov.log
set conf=/MIR /TEE /S /V /NP /R:0 /W:0 /A-:RAHTN /XF %files% /XD %folder% /LOG+:%log%
robocopy %zrodlo% %cel% %conf%
Na podstawie tego artykułu zrobiłem plik wsadowy dla okresowego kopiowania plików z dysku lokalnego do magazynu sieciowego. Działa dobrze, np. kopiuje tylko zmienione zasoby.
Foldery i pliki na dysku fizycznym są synchronizowane w zakładowej chmurze. Serwer plików z pełną kopią zapasową w oddziałowej sieci lokalnej dla mnie nie jest nadmiarową fanaberią.
Krzysztof