1.6 KiB
1.6 KiB
Live File Migration Pattern
When reorganizing, migrating, or archiving active infrastructure files (like scripts, documents, markdown notes, or configurations) on a live server, moving the file abruptly can break cron jobs, hardcoded paths in scripts, references in other notes, or user habits.
Instead of a simple mv, use the Copy-Remove-Symlink pattern to safely migrate files while keeping the old path functional.
The Pattern
migrate_file() {
src="$1"
dest_dir="$2"
# 1. Ensure source exists
if [ -f "$src" ]; then
filename=$(basename "$src")
dest_path="${dest_dir}/${filename}"
# 2. Copy to new destination
cp "$src" "$dest_path"
# 3. Remove original
rm "$src"
# 4. Create a symlink at the original location pointing to the new destination
ln -s "$dest_path" "$src"
echo "Migrated $src -> $dest_path"
else
echo "File not found: $src"
fi
}
# Example usage:
mkdir -p /root/projects/itpp-infra/backups
migrate_file "/root/.hermes/references/backup-policy.md" "/root/projects/itpp-infra/backups"
Why this works
- Existing scripts/references pointing to the old path follow the symlink transparently.
- The file is physically relocated to the new taxonomic structure.
- Over time, references can be updated to the new path, and the symlinks eventually cleaned up when safe.
Use this whenever the user asks to "move existing docs", "reorganize folder X", or "migrate configurations" to prevent silent breakages in the background infrastructure.