> rsync
Sync files and directories with rsync. Use when a user asks to copy files between servers, sync directories, create incremental backups, deploy files to a remote server, or mirror directories efficiently.
curl "https://skillshub.wtf/TerminalSkills/skills/rsync?format=md"rsync
Overview
rsync is the standard tool for efficient file synchronization. It only transfers changed parts of files (delta transfer), supports SSH, handles permissions, and works for backups, deployments, and directory mirroring.
Instructions
Step 1: Basic Usage
# Sync local directories
rsync -avz source/ destination/
# -a = archive (preserves permissions, timestamps, symlinks)
# -v = verbose
# -z = compress during transfer
# Sync to remote server
rsync -avz ./dist/ deploy@server:/var/www/myapp/
# Sync from remote
rsync -avz deploy@server:/var/log/myapp/ ./logs/
# Dry run (show what would change without doing it)
rsync -avzn source/ destination/
Step 2: Common Patterns
# Deploy website (delete files on destination that don't exist in source)
rsync -avz --delete ./build/ deploy@server:/var/www/site/
# Backup with exclude
rsync -avz --exclude='node_modules' --exclude='.git' --exclude='.env' \
/opt/myapp/ /backups/myapp/
# Incremental backup with hard links (space-efficient)
rsync -avz --link-dest=/backups/latest \
/opt/myapp/ /backups/$(date +%Y%m%d)/
ln -snf /backups/$(date +%Y%m%d) /backups/latest
# Bandwidth limited (useful for large transfers)
rsync -avz --bwlimit=5000 source/ destination/ # 5000 KB/s
Step 3: Deployment Script
#!/bin/bash
# scripts/deploy.sh — Deploy app with rsync
SERVER="deploy@prod.example.com"
REMOTE_DIR="/var/www/myapp"
echo "Building..."
npm run build
echo "Syncing files..."
rsync -avz --delete \
--exclude='node_modules' \
--exclude='.env' \
--exclude='.git' \
./dist/ ${SERVER}:${REMOTE_DIR}/
echo "Restarting service..."
ssh ${SERVER} "sudo systemctl restart myapp"
echo "Deploy complete!"
Guidelines
- Always use
-n(dry run) first when using--deleteto avoid accidental data loss. - Trailing slash matters:
source/syncs contents,sourcesyncs the directory itself. - For large transfers, add
--progressto see per-file progress. - rsync over SSH is encrypted by default — safe for internet transfers.
> related_skills --same-repo
> zustand
You are an expert in Zustand, the small, fast, and scalable state management library for React. You help developers manage global state without boilerplate using Zustand's hook-based stores, selectors for performance, middleware (persist, devtools, immer), computed values, and async actions — replacing Redux complexity with a simple, un-opinionated API in under 1KB.
> zod
You are an expert in Zod, the TypeScript-first schema declaration and validation library. You help developers define schemas that validate data at runtime AND infer TypeScript types at compile time — eliminating the need to write types and validators separately. Used for API input validation, form validation, environment variables, config files, and any data boundary.
> xero-accounting
Integrate with the Xero accounting API to sync invoices, expenses, bank transactions, and contacts — and generate financial reports like P&L and balance sheet. Use when: connecting apps to Xero, automating bookkeeping workflows, syncing accounting data, or pulling financial reports programmatically.
> windsurf-rules
Configure Windsurf AI coding assistant with .windsurfrules and workspace rules. Use when: customizing Windsurf for a project, setting AI coding standards, creating team-shared Windsurf configurations, or tuning Cascade AI behavior.