ينشئ هذا السكربت نسخة خارجية فعّالة ومشفّرة من مجلد محلي على خادم بعيد. يجمع بين rsync لنقل الفروقات (إذ لا تنتقل عبر الشبكة سوى الكتل المتغيرة) وssh كوسيلة نقل آمنة. بعد set -euo pipefail والتحقق من الوسائط، يقبل المسار المحلي وهدفاً بصيغة user@host والوجهة البعيدة ومنفذ SSH اختيارياً. تقوم خيارات rsync بالعمل الأساسي: يحافظ -a على الخصائص، ويضغط -z البيانات أثناء النقل، ويطبع -h أحجاماً مقروءة، ويتيح --partial استئناف عمليات النقل المتوقفة بدل إعادتها من البداية، ويُظهر --progress الحالة الحية، ويبقي --delete المضيف البعيد نسخة طبق الأصل. تضبط سلسلة -e ssh المنفذ وتستخدم accept-new للوثوق بالمضيفين المجهولين عند أول اتصال فقط. شغّله مع مصادقة بمفتاح SSH ليعمل دون تدخل من cron.
مزامنة مجلد إلى مضيف بعيد عبر rsync فوق SSH
يطابق مجلداً محلياً مع خادم بعيد بأمان عبر SSH.
1 مشاهدة
مشاركة
السكربت
تحميل .shbash
#!/usr/bin/env bash
#
# remote_sync.sh - Mirror a local directory to a remote host over SSH.
#
# Uses rsync over SSH for efficient, resumable, encrypted off-site backups.
#
# Usage: ./remote_sync.sh <local_dir> <user@host> <remote_dir> [ssh_port]
#
set -euo pipefail
# --- Argument handling --------------------------------------------------------
if [[ $# -lt 3 || $# -gt 4 ]]; then
echo "Usage: $0 <local_dir> <user@host> <remote_dir> [ssh_port]" >&2
exit 1
fi
LOCAL_DIR="$1"
REMOTE="$2"
REMOTE_DIR="$3"
SSH_PORT="${4:-22}"
[[ -d "$LOCAL_DIR" ]] || { echo "Error: local dir '$LOCAL_DIR' not found." >&2; exit 1; }
# --- Run the sync -------------------------------------------------------------
# -a archive, -z compress in transit, -h human-readable, --partial resumes
# interrupted transfers, --delete keeps the remote mirrored to the source.
echo "Syncing '$LOCAL_DIR' -> ${REMOTE}:${REMOTE_DIR} (port $SSH_PORT)"
rsync -azh --partial --progress --delete \
-e "ssh -p ${SSH_PORT} -o StrictHostKeyChecking=accept-new" \
"${LOCAL_DIR%/}/" "${REMOTE}:${REMOTE_DIR%/}/"
echo "Remote sync complete."كيفية التشغيل
راجع السكربت أولاً، ثم حمّله أو انسخه وشغّله في بيئتك.
قد يعجبك أيضاً
bashlinuxمتوسط
إعادة تسمية الملفات بالجملة وفق نمط
يعيد تسمية ملفات كثيرة دفعة واحدة عبر استبدال sed مع معاينة آمنة.
bashlinuxمتوسط
نسخ احتياطي لكل قواعد بيانات PostgreSQL باستخدام pg_dumpall
يُفرغ عنقود PostgreSQL كاملاً، مع الأدوار، في ملف مضغوط واحد.
bashlinuxمتوسط
نسخ احتياطي لكل قواعد بيانات MySQL باستخدام mysqldump
يُفرغ كل قاعدة بيانات MySQL في ملف SQL مضغوط مستقل.