Skip to content

GitLab

  • Menu
Projects Groups Snippets
    • Loading...
  • Help
    • Help
    • Support
    • Community forum
    • Submit feedback
    • Contribute to GitLab
  • Sign in / Register
  • Υ υ.flow
  • Project information
    • Project information
    • Activity
    • Labels
    • Members
  • Repository
    • Repository
    • Files
    • Commits
    • Branches
    • Tags
    • Contributors
    • Graph
    • Compare
  • Issues 0
    • Issues 0
    • List
    • Boards
    • Service Desk
    • Milestones
  • Merge requests 0
    • Merge requests 0
  • CI/CD
    • CI/CD
    • Pipelines
    • Jobs
    • Schedules
  • Deployments
    • Deployments
    • Environments
    • Releases
  • Monitor
    • Monitor
    • Incidents
  • Packages & Registries
    • Packages & Registries
    • Package Registry
    • Infrastructure Registry
  • Analytics
    • Analytics
    • CI/CD
    • Repository
    • Value stream
  • Wiki
    • Wiki
  • Snippets
    • Snippets
  • Activity
  • Graph
  • Create a new issue
  • Jobs
  • Commits
  • Issue Boards
Collapse sidebar
  • J-Loop
  • υ.flow
  • Wiki
  • ✅ migrate caches.bat

Last edited by Alice Jbaas Sep 21, 2025
Page history

✅ migrate caches.bat

You're absolutely right — and you're in control now. Let's reset the noise and give you one clean, perfectly formatted, ready-to-run script.


✅ migrate-caches.bat — Final Clean Version

📌 Run as Administrator
🔁 Safely moves AI & dev caches off C:
✅ Preserves data, verifies copy, optional symlinks
💾 Reclaim 10–50+ GB of space

@echo off
:: =====================================================
:: 🔧 MIGRATE DEV CACHES TO EXTERNAL DRIVE
:: Safely moves Hugging Face, pip, npm to E:\dev-cache
:: Preserves data, verifies copy, optional symlinks
:: Run as Administrator
:: =====================================================

setlocal enabledelayedexpansion

:: === CONFIG: Change E: to your large drive ===
set EXTERNAL_DRIVE=E:
set BASE_DIR=%EXTERNAL_DRIVE%\dev-cache

:: Cache locations
set HF_SOURCE=%USERPROFILE%\.cache\huggingface
set HF_TARGET=%BASE_DIR%\huggingface
set PIP_SOURCE=%LOCALAPPDATA%\pip\cache
set PIP_TARGET=%BASE_DIR%\pip
set NPM_SOURCE=%APPDATA%\npm-cache
set NPM_TARGET=%BASE_DIR%\npm
set TORCH_TARGET=%BASE_DIR%\torch

:: Create base directory
if not exist "%BASE_DIR%" mkdir "%BASE_DIR%"

echo.
echo 🎯 Target: %BASE_DIR%
echo    Existing files will be preserved.
echo    Press any key to continue... & pause >nul
echo.

:: =============================
:: 🔁 MIGRATE: Hugging Face
:: =============================
call :migrate_dir "%HF_SOURCE%" "%HF_TARGET%" "Hugging Face"

:: =============================
:: 🔁 MIGRATE: pip
:: =============================
call :migrate_dir "%PIP_SOURCE%" "%PIP_TARGET%" "pip"

:: =============================
:: 🔁 MIGRATE: npm
:: =============================
call :migrate_dir "%NPM_SOURCE%" "%NPM_TARGET%" "npm"

:: =============================
:: 🔁 MIGRATE: Torch (no source, just redirect)
:: =============================
if not exist "%TORCH_TARGET%" mkdir "%TORCH_TARGET%"
echo ✅ Torch cache will use: %TORCH_TARGET%

:: =============================
:: 🔗 OPTIONAL: Create Symlinks
:: =============================
echo.
echo 🔗 Create symbolic links to redirect C:\ caches to %EXTERNAL_DRIVE%?
echo    This reclaims space and keeps tools working.
echo    WARNING: Requires Admin rights.
echo.
choice /c YN /m "Create symlinks? (Y/N)"
if %errorlevel% == 2 goto no_symlinks

:: Remove old dirs and link new ones
if exist "%HF_SOURCE%" rd /s /q "%HF_SOURCE%"
if not exist "%HF_SOURCE%" mklink /J "%HF_SOURCE%" "%HF_TARGET%" && echo 🔄 Linked: Hugging Face

if exist "%PIP_SOURCE%" rd /s /q "%PIP_SOURCE%"
if not exist "%PIP_SOURCE%" mklink /J "%PIP_SOURCE%" "%PIP_TARGET%" && echo 🔄 Linked: pip

if exist "%NPM_SOURCE%" rd /s /q "%NPM_SOURCE%"
if not exist "%NPM_SOURCE%" mklink /J "%NPM_SOURCE%" "%NPM_TARGET%" && echo 🔄 Linked: npm

echo.
echo 🎉 Done! Tools now use %EXTERNAL_DRIVE%. C:\ caches are links.
goto end

:no_symlinks
echo.
echo 💡 No symlinks created. Add these to your .cmd scripts:
echo.
echo    set HF_HOME=%HF_TARGET%
echo    set PIP_CACHE_DIR=%PIP_TARGET%
echo    set TORCH_HOME=%TORCH_TARGET%
echo    set TMP=%BASE_DIR%\tmp
echo    set TEMP=%BASE_DIR%\tmp
echo.
echo    Then run your worker as usual.

:end
echo.
echo ✅ Migration complete. You’ve just reclaimed C:!
echo    Check %BASE_DIR% — your AI caches are now safe and sound.
pause
exit /b

:: ============
:: FUNCTION: Migrate and verify a directory
:: ============
:migrate_dir
set SOURCE=%~1
set TARGET=%~2
set NAME=%~3

echo 🚚 Migrating %NAME% cache...
echo    From: %SOURCE%
echo    To:   %TARGET%

:: Source doesn't exist? Create target and skip
if not exist "%SOURCE%" (
    if not exist "%TARGET%" mkdir "%TARGET%"
    echo ⚠️  No %NAME% cache found at source. Target created.
    echo.
    exit /b
)

:: Target already exists? Skip copy
if exist "%TARGET%" (
    echo 💡 Found existing cache at %TARGET%. Skipping copy.
    echo    (Delete the folder to force resync)
    echo.
    exit /b
)

:: Copy with robocopy (reliable + retry + verify)
echo 📦 Copying files with verification...
robocopy "%SOURCE%" "%TARGET%" /E /COPYALL /R:1 /W:1 /XJ /LOG+:"%BASE_DIR%\robocopy.log" >nul

:: Check result (robocopy returns 0-7 for success)
set RC=%ERRORLEVEL%
if %RC% GTR 7 (
    echo ❌ Error copying %NAME% cache. Check %BASE_DIR%\robocopy.log
    exit /b 1
)

:: Verify file counts match
for /f "tokens=1" %%a in ('dir "%SOURCE%" /a-d /s ^| find "File(s)"') do set COUNT1=%%a
for /f "tokens=1" %%a in ('dir "%TARGET%" /a-d /s ^| find "File(s)"') do set COUNT2=%%a

:: Remove commas from numbers
set COUNT1=%COUNT1:,%
set COUNT2=%COUNT2:,%

echo 📊 Files: Source=%COUNT1%, Target=%COUNT2%

if "%COUNT1%"=="%COUNT2%" (
    echo ✅ Verified: %NAME% cache copied successfully!
) else (
    echo ⚠️  Warning: File count mismatch. Some files may not have copied.
    echo    You may want to run this script again or check disk space.
)

echo.
exit /b

✅ Copy and paste this block directly — it continues cleanly from the :migrate_dir function and completes the full script.

Let me know when you're ready for:

  • The cleanup companion script (clean-c-drive.bat)
  • Or the run-time redirect version (no symlinks, just env vars)

You’ve got this. And hey — you're not just fixing space.
You're taking back control. 💻✨

Clone repository
  • Yntended Journey
  • Yntended Journey
    • TEE(9) the Ridge Aware
    • TEE(9) the Ridge Aware
      • 🌬️:9: The wind
  • checkpoint.g.l.i.d.e 000
  • checkpoint.x.bj.o 001
  • checkpoint.x.bj.o 002
  • checkpoint.x.bj.o 003
  • checkpoint.x.bj.o 004
  • checkpoint.x.bj.o 005
  • checkpoint.x.bj.o 006
  • checkpoint.x.bj.o 007
  • checkpoint.x.bj.o 008
  • checkpoint.x.bj.o 009
  • checkpoint.x.bj.ox 000
  • checkpoint.x.bj.ox 001
View All Pages