كيف يمكنني نسخ دليل بشكل متكرر إلى دليل آخر واستبدال الملفات التي لم تتغير فقط؟

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

سؤال

إنني أتطلع إلى عمل نسخة محددة في فيدورا.

لدي مجلدين:

  • "جذر الويب":الاحتفاظ بجميع ملفات/صور الويب وما إلى ذلك

  • 'يصدّر':مجلد يحتوي على آلاف مستندات PHP وCSS وJS التي تم تصديرها من SVN repo الخاص بي.

يحتوي دليل التصدير على العديد من نفس الملفات/المجلدات التي يحتوي عليها الجذر، إلا أن الجذر يحتوي على ملفات/مجلدات إضافية غير موجودة في التصدير.

أرغب في دمج جميع محتويات التصدير مع webroot الخاص بي بالخيارات التالية:

  1. الكتابة فوق الملف في Webroot إذا كان إصدار Export يحتوي على رمز مختلف عن ما يوجد داخل إصدار Webroot (Live)
  2. الحفاظ على أذونات/المستخدمين/مجموعات الملف إذا تم الكتابة فوقه (إصدار التصدير يحل محل الإصدار المباشر) *ملاحظة أود الحفاظ على أذونات/ملكية WebRoots ، ولكن مع محتويات التصدير
  3. لا يوجد/توقف للنسخة من أي نوع (أي ليس مطوّلة)
  4. نسخة متكررة - من الواضح أنني أود نسخ جميع مجلدات الملفات والمجلدات الفرعية الموجودة في التصدير

لقد أجريت القليل من البحث في cp - هل سيؤدي هذا المهمة؟:

cp -pruf ./export /path/to/webroot
هل كانت مفيدة؟

المحلول

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

rsync -pr ./export /path/to/webroot

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

يحرر:بالنسبة لتوضيحك حول ما تقصده بالحفاظ على الأذونات:ربما كنت ترغب في ترك -p خيار.

نصائح أخرى

  1. -u يقوم بالكتابة فوق مجلد الملفات الموجودة إذا كانت الوجهة أقدم من المصدر
  2. -p يحافظ على الإذن والتواريخ
  3. -f يوقف الإسهاب
  4. -r يجعل النسخة متكررة

لذا يبدو أنك حصلت على جميع الوسائط الصحيحة لـ cp

يبدو وكأنه وظيفة ل cpio (وبالتالي، من المحتمل أن GNU tar يمكنه فعل ذلك أيضًا):

cd export
find . -print | cpio -pvdm /path/to/webroot

إذا كنت بحاجة إلى الحفاظ على المالكين، فيجب عليك القيام بذلك كجذر بالطبع.ال -p الخيار هو "وضع المرور"، مما يعني النسخ بين المواقع؛ -v مطول (لكنه ليس تفاعليًا)؛هناك فرق)؛ -d يعني إنشاء الدلائل حسب الضرورة؛ -m يعني الحفاظ على وقت التعديل.بشكل افتراضي، بدون -u خيار، cpio لن يقوم بالكتابة فوق الملفات الموجودة في المنطقة المستهدفة الأحدث من تلك الموجودة في المنطقة المصدر.

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