A configurable bash script to download scripts from any World of Warcraft private server GitHub repos. Add your repos, run the script, done.
The script comes with 4 TrinityCore repos pre-configured. You can add more, remove some, or swap them out entirely.
WoW_Script_Downloader/
โโโ download_wow_scripts.sh โ the script
โโโ README.md โ this file
โ
โ (created after running the script โ)
โ
โโโ Scripts/ โ all downloaded scripts
โ โโโ TrinityCore_Master/
โ โ โโโ master/src/server/scripts/...
โ โโโ TrinityCore_3.3.5/
โ โ โโโ 3.3.5/src/server/scripts/...
โ โโโ TrinityCore_CataClassic/
โ โ โโโ cata_classic/src/server/scripts/...
โ โโโ TrinityCore_WotLKClassic/
โ โโโ wotlk_classic/src/server/scripts/...
โโโ Scripts_log.txt โ timestamped log of everything downloaded
| Tool | Why | Install |
|---|---|---|
| Git | Clones repos via sparse checkout | git-scm.com |
| Bash | Runs the script | Built into macOS/Linux, use Git Bash on Windows |
Install Git for Windows (includes Git Bash). Right-click in the folder โ Git Bash Here โ run the script.
Open Terminal, cd into this folder, and run.
chmod +x download_wow_scripts.sh./download_wow_scripts.shThat's it. It downloads all repos listed in the script into the Scripts/ folder and writes Scripts_log.txt.
- Browse the
Scripts/folder for your files. - Open
Scripts_log.txtto see what was downloaded, timestamps, and file counts.
The script comes ready to run with these 4 TrinityCore current branches:
| # | Group Name | Branch | What it is |
|---|---|---|---|
| 1 | TrinityCore_Master | master |
The War Within โ latest mainline |
| 2 | TrinityCore_3.3.5 | 3.3.5 |
WotLK 3.3.5a maintenance branch |
| 3 | TrinityCore_CataClassic | cata_classic |
Cataclysm Classic |
| 4 | TrinityCore_WotLKClassic | wotlk_classic |
WotLK Classic |
Open download_wow_scripts.sh in any text editor and find the REPOS=() section near the top (starts around line 30).
Each repo is one line inside the REPOS=( ... ) block, using pipe (|) separators:
"GROUP_NAME|BRANCH|REPO_URL|SPARSE_PATH"
| Field | Required | What it means |
|---|---|---|
| GROUP_NAME | โ Yes | Folder name inside Scripts/. Use anything โ no spaces. |
| BRANCH | โ Yes | Git branch, tag, or release name to download. |
| REPO_URL | โ Yes | Full .git URL of the repository. |
| SPARSE_PATH | โ Optional | Folder path inside the repo to download. If left blank, defaults to src/server/scripts. |
Add a new line inside the REPOS=( ... ) block:
REPOS=(
"TrinityCore_Master|master|https://github.com/TrinityCore/TrinityCore.git"
"TrinityCore_3.3.5|3.3.5|https://github.com/TrinityCore/TrinityCore.git"
"TrinityCore_CataClassic|cata_classic|https://github.com/TrinityCore/TrinityCore.git"
"TrinityCore_WotLKClassic|wotlk_classic|https://github.com/TrinityCore/TrinityCore.git"
# --- I added this one ---
"AzerothCore_Master|master|https://github.com/azerothcore/azerothcore-wotlk.git"
)With a custom path (if scripts aren't in src/server/scripts):
"My_Custom|main|https://github.com/username/repo.git|src/custom/scripts"There are also pre-written example lines commented out inside the script โ just remove the # to enable them:
# Uncomment the line below to enable AzerothCore:
# "AzerothCore_Master|master|https://github.com/azerothcore/azerothcore-wotlk.git"Remove the # to make it active:
"AzerothCore_Master|master|https://github.com/azerothcore/azerothcore-wotlk.git"Option A โ Comment it out (put # in front):
# "TrinityCore_WotLKClassic|wotlk_classic|https://github.com/TrinityCore/TrinityCore.git"Option B โ Delete the entire line.
Either way, that repo won't be downloaded on the next run.
Edit the values on its line. For example, to change a branch from master to main:
Before:
"TrinityCore_Master|master|https://github.com/TrinityCore/TrinityCore.git"After:
"TrinityCore_Master|main|https://github.com/TrinityCore/TrinityCore.git"Example 1 โ Only 2 repos:
REPOS=(
"TrinityCore_Master|master|https://github.com/TrinityCore/TrinityCore.git"
"TrinityCore_3.3.5|3.3.5|https://github.com/TrinityCore/TrinityCore.git"
)Example 2 โ 6 repos with mixed paths:
REPOS=(
"TrinityCore_Master|master|https://github.com/TrinityCore/TrinityCore.git"
"TrinityCore_3.3.5|3.3.5|https://github.com/TrinityCore/TrinityCore.git"
"TrinityCore_CataClassic|cata_classic|https://github.com/TrinityCore/TrinityCore.git"
"TrinityCore_WotLKClassic|wotlk_classic|https://github.com/TrinityCore/TrinityCore.git"
"AzerothCore_Master|master|https://github.com/azerothcore/azerothcore-wotlk.git"
"CMaNGOS_WotLK|master|https://github.com/cmangos/mangos-wotlk.git|src/game/ScriptMgr.cpp"
)Every run creates a fresh Scripts_log.txt that records:
- Timestamps for every action
- Repo URL, branch, and sparse path used
- File count per download
- Skipped repos (already downloaded)
- Warnings if a sparse path doesn't exist
- Final summary with totals
[2026-06-05 14:30:01] ========================================
[2026-06-05 14:30:01] Downloading: TrinityCore_Master -> master
[2026-06-05 14:30:01] Repo: https://github.com/TrinityCore/TrinityCore.git
[2026-06-05 14:30:01] Path: src/server/scripts
[2026-06-05 14:30:01] Target: ./Scripts/TrinityCore_Master/master
[2026-06-05 14:30:01] ========================================
[2026-06-05 14:30:15] [DONE] TrinityCore_Master/master โ 949 files downloaded
...
[2026-06-05 14:31:00] ============================================================
[2026-06-05 14:31:00] ALL DONE!
[2026-06-05 14:31:00] Downloaded: 4 repos
[2026-06-05 14:31:00] Skipped: 0 repos (already existed)
[2026-06-05 14:31:00] Failed: 0 repos
[2026-06-05 14:31:00] Total files in Scripts/: 3420
[2026-06-05 14:31:00] Saved to: ./Scripts
[2026-06-05 14:31:00] Log saved: ./Scripts_log.txt
[2026-06-05 14:31:00] ============================================================
The script skips repos that already exist. To re-download:
Remove a single repo:
rm -rf Scripts/TrinityCore_MasterRemove everything and start fresh:
rm -rf ScriptsThen run the script again.
| Problem | Solution |
|---|---|
command not found: git |
Install Git from git-scm.com |
Permission denied |
Run chmod +x download_wow_scripts.sh |
| Branch not found error | Check the branch name exists on the GitHub repo |
| Sparse path warning | The repo doesn't have that folder โ check the 4th field or leave it blank |
| Nothing downloaded | Check your internet connection and repo URLs |
| Want to update a repo | Delete its folder in Scripts/ and re-run |
- Uses
--depth 1for fast, shallow clones (only the latest commit) - Uses
--sparseto only download the scripts folder, not the entire repo - Each repo is isolated in its own subfolder โ no conflicts
- Safe to re-run anytime โ skips anything that already exists
- Works on macOS, Linux, and Windows (via Git Bash)
Made for the WoW private server development community.