Skip to content

Instantly share code, notes, and snippets.

@Avlyssna
Created January 4, 2021 01:21
Show Gist options
  • Save Avlyssna/f052bcca8017bd9f7799abd531e1ff15 to your computer and use it in GitHub Desktop.
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.
#!/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