← رجوع

نقل ومزامنة الملفات باستخدام rsync

R

UNIXMAN

Dec 30, 2025

Article Image

كيف صرت أعتمد على rsync لنقل الملفات بدون وجع رأس

في البداية كنت أستخدم أوامر بسيطة لنقل الملفات: cp، scp، وأحيانًا sftp. وكانت تمشي… إلى أن كبر الشغل. مع الوقت صرت أتعامل مع:
  • مجلدات كبيرة
  • ملفات تتحدث باستمرار
  • نسخ احتياطية
  • نقل ملفات بين جهاز محلي وسيرفر
هنا بدأت تظهر المشاكل الحقيقية: نقل بطيء، إعادة نسخ ملفات ما تغيرت، وانقطاع الاتصال يضيع كل شيء. وقتها تعرفت فعليًا على rsync.

وش يميز rsync عن أي طريقة نقل ثانية؟

rsync ما ينقل كل شيء كل مرة، هو ذكي ويقارن بين المصدر والوجهة. يعني:
  • ينقل فقط الملفات الجديدة أو اللي تغيرت
  • إذا انقطع النقل يقدر يكمله
  • سريع جدًا مع المجلدات الكبيرة
  • ممتاز للباك أب
بعد ما استخدمته، صرت أعتبره الأداة الأساسية لأي نقل ملفات.

أبسط استخدام لـ rsync

نقل مجلد محلي لمجلد ثاني:
rsync -av source/ destination/
وش تعني الخيارات:
  • -a وضع الأرشفة (يحافظ على الصلاحيات والتواريخ)
  • -v عرض التفاصيل أثناء النقل
مهم جدًا تلاحظ علامة / بعد اسم المجلد، فرقها يغير سلوك النقل بالكامل.

نقل ملفات بين جهازي والسيرفر

هنا بدأ استخدامي الحقيقي لـ rsync. نقل مجلد من جهازي للسيرفر:
rsync -av project/ user@server:/var/www/project/
نقل من السيرفر لجهازي:
rsync -av user@server:/var/www/project/ ./project/
الميزة هنا:
  • أسرع من scp
  • لو قطعت الاتصال ما يعيد من الصفر

استخدام rsync عبر SSH (الطريقة اللي أستخدمها دايم)

rsync يشتغل تلقائيًا عبر SSH، وإذا كنت مرتب اتصالك بمفاتيح SSH، يصير الموضوع أسهل. مثال:
rsync -av -e ssh backups/ server:/home/backups/
وبما إني أستخدم أسماء مختصرة للسيرفرات في ملف ssh config، أقدر أكتب:
rsync -av backups/ vps:/home/backups/
بدون IP ولا بورت ولا يوزر. شرح إعداد مفاتيح SSH وتنظيم الاتصال موجود في مقال منفصل . مقال مفاتيح SSH

تجاهل ملفات ما أحتاجها

من أكثر الأشياء اللي أستخدمها:
rsync -av --exclude="node_modules" --exclude=".git" project/ server:/var/www/project/
هذا يوفر:
  • وقت
  • مساحة
  • نقل أشياء ما لها داعي

حذف الملفات اللي انحذفت من المصدر

للباك أب الحقيقي، لازم الوجهة تعكس المصدر.
rsync -av --delete source/ destination/
تنبيه مهم: هذا الخيار قوي، وإذا استخدمته غلط ممكن يحذف ملفات مهمة، دايم أراجعه قبل التشغيل.

التجربة قبل التنفيذ (Dry Run)

قبل أي نقل حساس، أستخدم:
rsync -av --dry-run source/ destination/
هذا يعرض لك:
  • وش بينتقل
  • وش بينحذف
بدون ما يسوي أي تغيير فعلي.

دمج rsync داخل Bash Script

هنا بدأ rsync يصير جزء من النظام عندي. مثال سكربت باك أب بسيط:
#!/bin/bash

SOURCE="/var/www/project"
BACKUP="/home/backups/project"

if [ ! -d "$SOURCE" ]; then
  echo "Source not found"
  exit 1
fi

rsync -av --delete "$SOURCE/" "$BACKUP/"

echo "Backup completed at $(date)"
السكربت هذا:
  • يتأكد إن المصدر موجود
  • يسوي مزامنة ذكية
  • يحدث الباك أب بدون تكرار

تشغيل السكربت على أكثر من سيرفر

بما إني منظم اتصال SSH، أقدر أسوي سكربت ينقل لعدة سيرفرات:
#!/bin/bash

SERVERS=("vps" "homeserver")

for server in "${SERVERS[@]}"; do
  rsync -av project/ "$server:/var/www/project/"
done
بدون تكرار أو أوامر طويلة.

تسجيل النقل (Logging)

دايم أحب أعرف وش صار:
rsync -av project/ server:/var/www/project/ >> rsync.log 2>&1
أو داخل السكربت:
echo "Sync started at $(date)" >> rsync.log
إذا صار خطأ، أرجع للملف وأفهم وش اللي حصل.

ليش rsync صار أداة أساسية عندي

rsync علمني فكرة مهمة: النقل الذكي أهم من النقل السريع فقط. اليوم أستخدمه في:
  • نسخ احتياطية
  • نقل مشاريع
  • مزامنة ملفات بين أجهزة
  • تشغيله داخل سكربتات