سؤال يمكن نسخ الأدلة scp بشكل متكرر؟


حاليا يمكنني فقط نسخ واحد .tar ملف. ولكن كيف يمكنني نسخ الدلائل بشكل متكرر مع scp؟


520
2018-04-29 04:24


الأصل




الأجوبة:


نعم ، استخدم -r:

scp -rp sourcedirectory user@dest:/path
  • -r يعني متكررة
  • -p يحافظ على أوقات التعديل وأوقات الوصول والأوضاع من الملف الأصلي.

ملاحظة: هذا يخلق sourcedirectory في داخل /path وبالتالي سوف تكون الملفات في /path/sourcedirectory


841
2018-04-29 04:28



ومع ذلك ، ضع في اعتبارك أن هذا لن يحافظ على الروابط. - CpnCrunch
لاحظ أن -pr (خيارات في ترتيب عكسي) لن تنسخ المجلدات ، بر بدلا من محتواها إلى الدليل الهدف (على ما يبدو ، يهم ترتيب الخيارات). - pms
لسبب ما /path يبدو أن نسبة إلى userالصورة $HOME - كيف أجعلها مطلقة بدون أن أكون root@؟ - Jonathan
نعم ، لا يضع SCP مثلًا الملفات التي أريدها. في كثير من الأحيان عند محاولة استبدال دليل ، أنا في نهاية المطاف مع دليل آخر داخله بنفس الاسم بدلا من ذلك. أنا أكثر حذرا مع هذا. - sudo


في حين أن الإجابات السابقة صحيحة تقنياً ، يجب عليك أيضًا التفكير في استخدامها rsync في حين أن. rsync يقارن البيانات الموجودة على جانبي الإرسال والاستقبال باستخدام آلية الاختلاف ، لذلك لا يلزم إعادة إرسال البيانات التي تم إرسالها مسبقًا بالفعل.

إذا كنت تنوي نسخ شيء إلى جهاز بعيد أكثر من مرة ، فاستخدمه rsync. في الواقع ، من الجيد أن تستخدم rsync في كل مرة لأنه يحتوي على عناصر تحكم أكثر لأشياء مثل نسخ أذونات الملفات والملكية واستبعاد بعض الملفات أو الدلائل. بشكل عام:

$ rsync -av /local/dir/ server:/remote/dir/

سوف تزامن دليل محلي مع دليل بعيد. إذا قمت بتشغيله مرة ثانية ولم تتغير محتويات الدليل المحلي ، فلن يتم نقل أي بيانات - أكثر فعالية من التشغيل scp ونسخ كل شيء في كل مرة.

أيضا، rsync يسمح لك بالتعافي من عمليات النقل المتقطعة بسهولة ، بخلاف ذلك scp.

وأخيرا ، إصدارات حديثة من rsync افتراضيا تشغيل عبر ssh ، لذلك إذا scp يعمل بالفعل ، rsync يجب أن تكون بديلاً


149
2018-04-29 05:11



"لن يتم نقل أي بيانات" ما عدا ، بالطبع ، البيانات المطلوبة لتحديد ما تم أو لم يتم تغييره بالضبط. - thsutton
ها نعم أنا تلمع ذلك أكثر من الواضح بعض الشيء. نحن لا نتحدث عن التشابك الكمومي هنا. - Phil Hollenback
من المحزن جدًا أن osx و win7 ولا يستخدم أوبونتو شيءًا مثل rsync لواجهة المستخدم الرسومية حتى الآن. - cregox
dmourati أجبت عن سؤاله. قلت له طريقة أفضل للقيام بذلك. - Phil Hollenback
raphnguyen: لا ، لن يؤدي حذف الملفات من الدليل المحلي إلى حذفها من الدليل البعيد. يمكنك تشغيل هذا السلوك مع --delete خيار rsync. - Phil Hollenback


هذا هو ما -r الخيار هو ل. :)

شاهد صفحة الرجل SCP لمزيد من المعلومات إذا لزم الأمر.


30
2018-04-29 04:27





خيار النسخ المتكرر "-r" (حالة الأحرف الصغيرة)

scp -r

التي أخلط بينها وبين خيار النسخ العودي المحلي المنتظم "-R" (الحالة العليا)

cp -R

9
2017-09-11 17:53



أردت فقط الإشارة إلى الفرق بين cp و scp كـ -r و -R ليست هي نفسها. unix.stackexchange.com/questions/18712/... - Tarun


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

rsync -a -essh /source/ user@dest-server:/dest/

rsync -a -essh user@source-server:/source/ /dest/

خياراتي المفضلة هي -Pazvessh - حذف:

  • - وضع الأرشفة (يشمل الكثير من الخيارات العامة الافتراضية ، بما في ذلك الحفاظ على الروابط الرمزية)
  • -z: ضغط
  • -v: verbose: عرض الملفات
  • -P: show progess as files done / remaining files
  • -s ssh: do rsync in ssh protocol
  • - حذف: حذف الملفات في الوجهة التي لم تعد موجودة في المصدر

4
2017-11-05 18:33



جميع إصدارات rsync التي استخدمتها ستستخدم ssh افتراضيا ، لذلك -essh من غير المحتمل أن تكون هناك حاجة إليها. ولا يرتبط اختيار الأمر المستخدم للاتصال بالمضيف البعيد حقًا بالنسخ المتكرر. - kasperd


بعد البحث عن علامة النسخ العودية ، واستخدامها بنجاح بفضل هذه المشاركة ، أود نشر اقتراح فقط.

إذا كانت الحالة أنك تقوم بنسخ دليل (بشكل متكرر). ربما إذا تم إرسال الملفات مضغوط يمكنك توفير الوقت في النقل

ما فعلته في النهاية كان:

local$ tar -czvf local.tar.gz directory/
local$ scp local.tar.gz user@remote:/directory
ssh user@remote
remote$ tar -xzvf local.tar.gz

أتمنى أن يساعدك هذا


3
2018-06-06 18:00



يجب أن يكون ملحق الملف إما .tar.gz أو .tgz لأن الملف هو أرشيف tar gzipped (منذ -z يستخدم العلم). - anthonybell


يمكنك نسخ دليل بشكل متكرر إلى أرشيف مضغوط باستخدام هذا الأمر البسيط:

ssh -p 22 user@address-to-copy-from.com  'cd /parent/directory && tar zcvf - directory_to_copy' > /destination/on/your/machine/archive_name.tgz

على سبيل المثال ، لنسخ محتويات /var/log من عند domain.com إلى ~/logs.tgz أنت تركض:

ssh -p 22 user@domain.com  'cd /var && tar zcvf - log' > ~/logs.tgz

يمكنك أيضًا استخراج الملفات على النظام الهدف باستخدام الأنابيب. هذا الأمر سوف ينسخ محتويات /var/log في domain.com إلى ~/destination/log على نظامك:

ssh -p 22 user@domain.com  'cd /var && tar zcvf - log' | tar xzf - -C ~/destination

على الرغم من مرآة الدليل ، ربما يجب عليك استخدامه rsync...


1
2018-01-06 07:20