برنامج نصي شل لتحميل ملف إلى نفس الدليل الفرعي على خادم عن بعد
إحدى المهام الشائعة جدًا لمطوّر الويب هي تحميل ملف واحد من دليل فرعي في مربع التطوير إلى نفس الدليل الفرعي على خادم بعيد. لسوء الحظ ، ينتهي الأمر دائمًا بكونه عملية يدوية مزعجة تتضمن تبديل الدلائل على كلا الخادمين ، وإهدار قدر كبير من الوقت.
لذا ، أخذت على عاتقي كتابة نص برمجي من أجل أتمتة هذا ، باستخدام scp لنسخ الملفات الآمن. (ملاحظة جانبية مهمة: بروتوكول نقل الملفات غير آمن بشكل فظيع ، استخدم WinSCP بدلاً منه)
كانت المشكلة الرئيسية لحل أن تثبيت WordPress على جهاز التطوير لدي دليل أساسي مختلف عن التثبيت على الخادم الخاص بي. على جهاز التطوير الخاص بي هو / var / www ، وعلى الخادم الخاص بي هو شيء أشبه / var / www / howtogeek / docs /. قررت فقط نقل تلك إلى المتغيرات في بداية البرنامج النصي ، مثل هذا:
[email protected]
RDIR = / فار / على شبكة الاتصالات العالمية / howtogeek / مستندات
LDIR = "\ / فار \ / على شبكة الاتصالات العالمية"
لاحظ أن الدليل المحلي (LDIR) في البرنامج النصي يحتوي على \ before كل / في المسار. هذا لأننا سنمرر هذا إلى أمر سيد في وقت لاحق من النص ، لذلك علينا الهروب من تلك القيم. أنا متأكد من أن هناك طريقة أخرى حول هذا ، لكنني غير مدرك لذلك.
بعد ذلك ، أقوم بإعداد تسجيلات الدخول التلقائي لـ ssh. للقيام بذلك ، تحتاج أولاً إلى تشغيل الأداة المساعدة ssh keygen مثل:
ssh-keygen -t rsa
ثم تحتاج إلى نسخ الملف ~ / .ssh / id_rsa.pub إلى ملف ~ / .ssh / authorized_keys على الخادم البعيد. إذا تم بالفعل إنشاء الدليل ~ / .ssh على الخادم البعيد (قد ترغب في التحقق) ، فيمكنك تشغيل هذا الأمر لنسخ المفاتيح على:
cat ~ / .ssh / id_rsa.pub | ssh user @ hostname 'cat >> .ssh / authorized_keys'
الآن لدينا لدينا تسجيلات الدخول ssh الآلي ، والتي ستمكن من استخدام الأداة المساعدة SCP بدون كلمة مرور. الآن دعونا نلقي نظرة على الأمر scp الذي سنستخدمه في البرنامج النصي:
scp $ 1 $ SSHSERVER: $ RDIR'pwd | sed "s / $ LDIR //" '/' echo $ 1 | sed 's /.*\/// "
يمثل $ 1 المعلمة التي سيتم تمريرها إلى البرنامج النصي الخاص باسم الملف الذي تحاول تحميله. $ SSHSERVER و $ RDIR هي متغيرات سنضعها في بداية النص البرمجي لضبط اسم المستخدم @ hostname والمسار البعيد السابق.
تأخذ الكتلة الأولى التي تبدأ بـ pwd | sed مسار الدليل الحالي والشرائط من الجزء السابق من المسار الذي لا يتطابق مع الخادم البعيد ، لكنه يترك بقية المسار. على سبيل المثال ، إذا كنت في / var / www / wp-content / عند تشغيل الأمر ، فإن كتلة sed ستقطع / var / www استنادًا إلى متغير LDIR الخاص بنا ، ولكن تترك / wp-content / جزء منه.
الكتلة الثانية فقط تأكد من إزالة المسار السابق بأكمله من اسم الملف الذي تم تمريره إلى البرنامج النصي حتى تحصل على اسم الملف فقط.
على سبيل المثال ، إذا قمت بتسمية البرنامج النصي up.sh وقمت بتشغيله من المجلد / var / www / wp-content / plugins / المحلي على ملف:
up.sh myplugin.php
هذا من شأنه أن يوسع من قبل قذيفة كما يلي:
scp myplugin.php [email protected]: /var/www/howtogeek/docs/wp-content/plugins/myplugin.php
بدلاً من محاولة إنشاء ملفك النصي الخاص استنادًا إلى المقالة ، فقد قمت بتنزيلها. بهذه الطريقة لن يكون هناك أي مشاكل مع الأحرف الخاصة لا تعمل ... ونعم ، أنا استخدم البرنامج النصي لتحميل نفسه =)
تنزيل geek-uploader.sh
فقط ضعها في مكان ما في طريقك ، واسمها كما تشاء. أعدت تسمية ملفي إلى "up" ، حتى أتمكن من كتابة "up filename.txt" للتحميل. تذكر أيضًا فتحه وتغيير المتغيرات في بداية البرنامج النصي لمطابقة البيئة الخاصة بك.
يجب أن يعمل هذا البرنامج النصي على أي شيء مع shell * nix والأداة scp. أنا أستخدم أوبونتو ، ولكن يجب أن يعمل على نظام التشغيل سولاريس أو OS X أو حتى Windows مع Cygwin.