حدث خطأ أثناء محاولة جعل القيادة رسينك أسهل

StackOverflow https://stackoverflow.com/questions/294193

  •  08-07-2019
  •  | 
  •  

سؤال

وعادة ما تستخدم اللجنة الدائمة لنسخ الأشياء، ولكن الآن أنا أحاول أن تعتاد على الأمر رسينك أكثر قوة. انه يساعدني على استخدام عرض النطاق الترددي أقل عن طريق نسخ احتياطية من الملفات التي تغيرت فقط. ومع ذلك، رسينك لديه الكثير من المعلمات معقدة، حتى ظننت، مهلا، أنا سوف تجعل مجرد سيناريو باش القليل الذي يجعل من السهل بالنسبة لي، واستدعاء الأمر "rscp. بذلك، قبالة ذهبت بناء شيء من هذا القبيل. نلاحظ في المثال أدناه أن بلدي استضافة المواقع على الشبكة يستخدم رقم منفذ مختلف بالإضافة إلى 22، ولهذا السبب يستخدم 1 $ لذلك.

#!/bin/bash

rsync -avzp --progress --rsh='ssh -p$1' $2 $3 $4 $5 $6 $7

وهكذا، استخدامه، وأنا عن أمله في أن يكون شيئا مثل:

rscp 3822 --exclude=tiny_mce /var/www/mysite/* root@webhost.com:~/www/mysite

وهذا من شأنه أن يجعل من أقرب قليلا إلى استخدامي للقيادة اللجنة الدائمة، كما ترى.

ولكن عندما ركضت هذا، وأحصل على هذا الخطأ:

building file list ... 
4 files to consider
ERROR: destination must be a directory when copying more than 1 file
rsync error: errors selecting input/output files, dirs (code 3) at main.c(494) [receiver=2.6.9]
rsync: connection unexpectedly closed (8 bytes received so far) [sender]
rsync error: error in rsync protocol data stream (code 12) at io.c(454) [sender=2.6.9]

ولكن إذا أعود إلى الأمر رسينك منتظم، وأنها تعمل على ما يرام.

ويمكن لأي شخص معرفة ما أفعله خطأ في بلدي النصي باش؟

هل كانت مفيدة؟

المحلول

و/ فار / على شبكة الاتصالات العالمية / مع mysite / * يتم توسيع قبل shell، بحيث يكون لديك العديد من الحجج التي مرت في من كنت معالجة في البرنامج النصي.

وأيضا ليست بديلا المتغيرات في علامات الاقتباس المفردة، لذلك تحتاج إلى استخدام علامات الاقتباس المزدوجة. (انظر باش الصفحة رجل )

وجرب هذا:

#!/bin/bash
PORT=$1
shift
rsync -avzp --progress --rsh="ssh -p$PORT" "$@"

والأولى أن نأخذ ميناء من القائمة الحجة (مع التحول)، ثم نستخدم "$ @" الذي هو خاص، فإنه يشير إلى مقولة (للنص البرمجي في هذه الحالة)، ويتم تحويلها إلى كل منهم، ولكن كل على حدة في علامات اقتباس مزدوجة. (انظر الصفحة رجل للحصول على مزيد من التفاصيل) .

نصائح أخرى

ويمكن أن ليس لك من الناحية الفنية تحويل ذلك إلى وظيفة أيضا:؟

    rscp() {
rsync -avzp --progress --rsh="ssh -p$PORT" "$@"
}

وبعد ذلك عند تشغيلها: rscp 3822

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top