سؤال كيفية استخدام rsync عبر بروتوكول نقل الملفات


أي يونيكس:

لدي خط كمد التالي الذي يعمل بشكل جيد.

rsync -avr -e ssh /home/dir user@example.com:/home/

ولكن أحتاج إلى إعداده الآن إلى rsync إلى خادم بعيد يحتوي فقط على خادم FTP عليه. كيف أذهب عن ذلك؟

نظرت إلى مساعدة rsync ولكن سرعان ما فقدت (لا أفعل هذه الأشياء في كثير من الأحيان).


176
2018-06-12 09:51


الأصل


هذا يشبه السؤال عن كيفية استخدام HTTP عبر IRC ، أو كيفية استخدام FTP عبر SMTP ... - Juliano
ربما يمكنك شرح بعض المنطق الخاص بك لرغبة في القيام بذلك ، ثم يمكننا مساعدتك في التوصل إلى حل قابل للتطبيق. - James
في الأساس كنت أحاول أتمتة نسخة احتياطية من خادم استضافة مشترك ، ولم أفهم كيفية عمل rsync. لقد انتقلت إلى VPS الآن ، ولم يكن لدي قيود على ftp بعد الآن - bumperbox
التوفيق هو ربك: scie.nti.st/2013/4/13/... - user956584
إذا نشر هو ، ما يدور في ذهنك ، وأنت لا تمانع في NodeJS ، تحقق من ذلك dployوكسول ويعمل بشكل جيد مع بوابة - Frank Nocke


الأجوبة:


لا تفعل لا تستطيع rsync القيام بذلك نيابة عنك ، فهي بروتوكول خاص بها ولا تعمل عبر FTP.

ومع ذلك ، قد ترغب في المحاولة csync. IIRC أنه يوفر سلوك يشبه rsync عبر HTTP. لا يمكنني التعليق على ما إذا كان يعمل عبر بروتوكول نقل الملفات ، عليك تجربة ذلك.


76
2018-06-12 10:00



أنظر إلى صفحة الويب csync، وهو يدعم sftp ولكن لا يوجد ذكر للدعم لبروتوكول نقل الملفات العادي. - Keith Thompson


رسينك لن يعمل لك من أجل الأسباب التي ذكرها الآخرون. ومع ذلك، LFTP و ncftp كلاهما لديه أوضاع "مرآة" من المحتمل أن تلبي احتياجاتك.

يمكنني استخدام هذا لدفع الأشياء من الدليل المحلي إلى مضيف الويب ftp أو sftp:

lftp -c "set ftp:list-options -a;
open ftp://user:password@your.ftp.com; 
lcd ./web;
cd /web/public_html;
mirror --reverse --delete --use-cache --verbose --allow-chown  
--allow-suid --no-umask --parallel=2 --exclude-glob .svn"

156
2018-06-12 14:58



LFTP هو لطيف جدا. واحد آخر اكتشفت عنه هو wput التي لديها عرض النطاق الترددي المدمج في الحد. - karmakaze


كما كتبه حامل لقماشة الرسام، lftp هي أداة جيدة.

أقترح عليك parametrize السيناريو ، والاستفادة من

exclude-glob

الخيارات ، التي تستثني أسماء الملفات باستخدام ميزة glob (* ،؟ ..) من shell:

#!/bin/bash    
HOST="your.ftp.host.dom"
USER="username"
PASS="password"
FTPURL="ftp://$USER:$PASS@$HOST"
LCD="/path/of/your/local/dir"
RCD="/path/of/your/remote/dir"
#DELETE="--delete"
lftp -c "set ftp:list-options -a;
open '$FTPURL';
lcd $LCD;
cd $RCD;
mirror --reverse \
       $DELETE \
       --verbose \
       --exclude-glob a-dir-to-exclude/ \
       --exclude-glob a-file-to-exclude \
       --exclude-glob a-file-group-to-exclude* \
       --exclude-glob other-files-to-exclude"

تحذير: تأكد من وجود الدليل الهدف ، وإلا سوف تفشل الأوامر cd ، لذلك العملية بما في ذلك حذف أشجار الملفات  سيعقد في دليل خاطئ (الجذر)!

لقد قمت بتحديث البرنامج النصي بحيث --delete تم تعطيل الخيار عن طريق defaut ، وتمكينه عن طريق uncommenting DELETE= command.


119
2018-01-26 11:58



ساعدني في حفنة عظيمة لكنني اضطررت إلى إزالة "ftp: list-options -a؛" حيث حيث الاشياء تعبث. - mat
هل هناك شيء من هذا القبيل يفعل نفس الشيء على SFTP (FTPS؟)؟ - trusktr
سأفعل هذا من قبل cd $RCD، وذلك لمنع a-script-with-a-typo من حذف الملفات بطريق الخطأ من الدليل الخطأ: set cmd:fail-exit yes. (يبدو lftp لا تلاحظ أنه قد خرج بالفعل ، حتى تصدر الأمر التالي.) - وقبل ذلك cd $LCD سأفعل هذا (في الغلاف المحلي ، أي في الجزء العلوي من السهم): set -eu. - KajMagnus
في الواقع ، في المرة الأولى التي أقوم فيها بتشغيل البرنامج النصي الخاص بي ، لم أقم بعد بإنشاء الدليل البعيد ، لذلك فشل البرنامج النصي في إنشاء قرص مضغوط في ذلك المخرج غير الموجود. ثم بدأ البرنامج النصي ل mirrorوهكذا --delete: د الملفات من دير الخطأ. (لكنني قمت بنسخها مرة أخرى ، لذلك في هذه الحالة لم يكن الأمر مهمًا. ربما يهم شخصًا آخر). - KajMagnus
بالإضافة إلى اتباع نصيحةKajMagnus حول استخدام "set -eu" و "cd $ LCD" ، أضف "mkdir -p $ LCD" قبل "cd $ LCD" - وبهذه الطريقة يمكنك التأكد من وجود الدليل وأنك موجود. إعادة في ذلك. - Paul Gear


اعتمادا على ما تحاول القيام به فعلا ، يمكن استخدام نهج مختلف تماما curlftps لتركيب مجلد ftp ، وربما بعد ذلك rsync المجلدات "المحلية" اثنين.

يختلف التثبيت اعتمادًا على التوزيعة الخاصة بك حتى لا أستطيع التعميم على ذلك ، ولكن تحتاج إلى التثبيتfuse و curlftpfs (prolly ديبيان لديها بالفعل fuse التثبيت افتراضيًا) ، ثم:

  1. sudo apt-get install curlftpfs

  2. تأكد من أن fuse وحدة محملة (modprobe fuse)

  3. sudo curlftpfs ftp.yourserver.com /path/to/ftp/folder/ -o user=username:password,allow_other

لاحظ أنه لا توجد مسافة بعد الفاصلة الأخيرة (إنها ليست خطأ مطبعي!). إذا كنت راضيًا عن ذلك أو لا تريد أن تفعل ذلك في كل مرة ، يمكنك إضافته إلى fstab (عادة في /etc/fstab):

curlftpfs#user:password@ftp.yourserver.com /path/to/ftp/folder/ fuse auto,user,uid=1000,allow_other 0 0

في هذه الحالة ، يجب عليك التأكد من تحميل وحدة الصمامات من قبل.

كن على علم ، من بين أمرين:

  • أن المطور أسقط المشروع قبل عام أو عامين ، لذا لا أعرف مدى قابلية الاستخدام / الاستقرار في الوقت الحالي.
  • إذا كانت كلمة المرور تحتوي على شخصية غريبة curlftpfs يمكن أن تفشل (ربما يمكنك أن تفعل شيئا مع .netrc).

23
2017-12-11 12:39



إن FTP Fuse و rsync هما الأقرب إلى السؤال ولكنهما بشكل واضح على أي شيء سوى مجموعة صغيرة من الملفات الصغيرة. - Steve-o
لماذا يكون من الجنون؟ افتراضيا rsync stat () s ، فإنه لا يقارن المحتويات. يمكن القيام بذلك بواسطة ls -l مع عميل ftp. - ptman
لقد حاولت بالفعل هذا (عبر rsnapshot) ولم ينجح ، كل ملف عاد والخطأ ، مما يدل على أن rsync لا يمكن إنشاء ارتباط. وذلك باستخدام LFTP بالتزامن مع rsnapshot فعل الخدعة - Konstantin Pereiaslov
لا تشوبه شائبة في 14.04 LTS ؛ نصيحة إضافية: عندما تكون مستعدًا لإلغاء تحميل موقع FTP الخاص بك ، استخدمه ببساطة umount DIR أين DIR كان لديك /path/to/ftp/folder في الاعلى. - Joe
2017 ، وهذا لا يزال يعمل! بصراحة أسهل طريقة لنسخ الملفات من موقع FTP enmasse. جبل محليا ، ثم rsync كما لو كانت محلية - td512


يوجد weex...

Weex هو أداة مصممة ل   أتمتة مهمة عن بعد   الحفاظ على صفحة الويب أو بروتوكول نقل الملفات الأخرى   أرشيف. وسوف تزامن مجموعة من   الملفات المحلية إلى خادم بعيد من قبل   تنفيذ التحميلات والحذف عن بعد   كما هو مطلوب.


16
2017-08-17 14:38



يعمل مثل السحر! تشغله هكذا: $ weex yourFTPconfigName هنا هو دليل linuxcertif.com/man/1/weex - sobi3ch


لا يعمل rsync عبر ftp. على الجانب البعيد يحتاج إلى rsync daemon أو shell الذي يمكنه استدعاء rsync منه. Ftp عموما يسمح لك باستدعاء بعض الأوامر و rsync ليست واحدة منها. هناك أدوات أخرى مخصصة لأتمتة مهام ftp مثل "lftp".


9
2018-06-12 10:03





يبدو هذا مناسبًا جيدًا ومجانيًا: https://savannah.gnu.org/projects/ftpsync/


8
2018-06-12 15:02



بالنظر إلى تبخير كومة لا تنزعج لمسة-مع-عشرة أقدام القطب لقد أصبح موقع SourceForge مؤخرًا ، وربما يجب عليك تحديث الرابط إلى صفحة الويب للمشروع. - HopelessN00b


على ما يبدو أنك تحاول القيام به ، يمكنك أيضًا استخدام wget.

wget -m بروتوكول نقل الملفات: // اسم المستخدم: password@domain.com


7
2018-02-25 18:12



هذا سيجعل فقط مرآة للموقع. لا يمكنك استخدام هذا لتحميل تعديلاتك. - David V.