Potrzebuję robić codzienne kopie całego serwera jednej z gier. Bez problemów zrobiłem skrypt, automatycznie wyłączający serwer, kopiujący folder z serwerem, i zapisanie go jako tar.gz z nazwą data-godzina, a po wszystkim uruchomienie serwera, no i oczywiście wszystko zautomatyzowane w cronie.
Jednak mapa gry się rozwija (Minecraft, wiadomo) i kopie robią się coraz większe i coraz dłużej. Rozmiar znacząco powiększa jeden folder - plugin mapy. I tu jest problem, bo nie chcę go kopiować.
Aktualnie kopiuję folder z całym serwerem. Powiedzmy, że jest w lokalizacji /a/b/minecraft/*. Ja natomiast potrzebuję wykluczyć folder /a/b/minecraft/plugins/pluginxyz/*. “Ręczne” sposoby kopiowania (w sensie każdy katalog/plik po kolei (lub ileś o tej samej nazwie)) raczej nie wchodzą w grę, bo zawartość innych katalogów może się znacząco różnić.
Do sedna.
Istnieje coś takiego, jak wykluczenie przy komendzie tar lub przy kopiowaniu? Jakiekolwiek rozwiązanie?
Szukałem w sieci, ale nie natknąłem się na nic, co mogłoby mi pomóc.
Pierwsze rozwiązanie, które wpadło mi do głowy na szybkiego, to wylistowanie wszystkich plików (pod)katalogów, wykluczenie tych pasujących do Twojego wzorca, a reszta idzie do archiwum.
tar -cvjf archiwum.tar.bz2 /a/b/minecraft/ --exclude=pluginxyz
w tym przypadku pluginxyz to wzorzec, wszelkie pliki i katalogi odpowiadające temu wzorcowi będą wykluczane. Katalogów nie musisz kopiować, możesz je od razu archwizować i pakować jednocześnie.
Powyższe polecenie nie działa, jednak po poszukaniu informacji o exclude z tar-a zadziałało takie coś:
tar -cvjf nazwa.tar.bz2 /a/b/minecraft/ --exclude /a/b/minecraft/plugins/pluginxyz
(bez znaku równości nie musi być wzorca, który w moim przypadku nie chciał działać i go nie potrzebuję, po prostu wystarczy mi ominięcie jednego katalogu)
Dziwne, u mnie działa Jeśli wystarczy jeden katalog, to tak, w przypadku wielu plików o tej samej nazwie w wielu katalogach, lepiej sprawdza się wzorzec.