Created
January 4, 2021 01:21
-
-
Save Avlyssna/f052bcca8017bd9f7799abd531e1ff15 to your computer and use it in GitHub Desktop.
A simple Python script to provide lightweight backup operations for Minecraft worlds and playerdata.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
#!/usr/bin/env python3 | |
from datetime import datetime as DateTime | |
from pathlib import Path | |
from shutil import copy2, rmtree | |
MINECRAFT_ROOT = Path('/opt/minecraft') | |
def take_backup(target, storage, files): | |
target = Path(target) | |
storage = Path(storage) | |
if not storage.exists(): | |
storage.mkdir(parents=True) | |
for file in target.glob(files): | |
copy2(file, storage / file.name) | |
def cleanup_backups(storage, day_limit=2): | |
storage = Path(storage) | |
for folder in storage.iterdir(): | |
if DateTime.now().timestamp() - folder.stat().st_mtime > 86400 * day_limit: | |
rmtree(folder) | |
def backup_regions(timestamp): | |
take_backup( | |
target=MINECRAFT_ROOT / 'server/world/region', | |
storage=MINECRAFT_ROOT / f'backups/regions/{timestamp}', | |
files='*.mca' | |
) | |
cleanup_backups(MINECRAFT_ROOT / 'backups/regions') | |
def backup_playerdata(timestamp): | |
take_backup( | |
target=MINECRAFT_ROOT / 'server/world/playerdata', | |
storage=MINECRAFT_ROOT / f'backups/playerdata/{timestamp}', | |
files='*.dat' | |
) | |
cleanup_backups(MINECRAFT_ROOT / 'backups/playerdata') | |
def main(): | |
timestamp = DateTime.now().strftime('%m-%d-%Y_%I-%M_%p') | |
backup_regions(timestamp) | |
backup_playerdata(timestamp) | |
if __name__ == '__main__': | |
main() |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment