أمر زئبقي لتحديد الملفات التي تتطابق مع فيليسبيك وتغيرت منذ آخر تحديث

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

  •  12-11-2019
  •  | 
  •  

سؤال

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

السيناريو هو أن لدي مستودعا على خادم يتلقى دفعات من المستخدمين.الريبو هو أيضا نسخة العمل الذي هو مصدر لصفحات ويكي (دوكويكي) ، والتي هي ببساطة الملفات النصية التي هي في مستودع ، واحد لكل صفحة في ويكي.

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

يبدو الملف الدفعي كما يلي:

@echo off
cd \dokuwiki\data\directory
start /wait cmd.exe /c hg update
start /wait cmd.exe /c hg resolve -m -a
start /wait cmd.exe /c hg resolve -a
start /wait cmd.exe /c hg commit -A -m "Automated commit"
for /r %%x in (*.jpg *.png *.gif) do copy /y "%%x" ..\..\media\directory

هذا يعمل بشكل جيد للملفات النصية ، ولكن دوكويكي يتطلب أن يتم تخزين وسائل الإعلام مثل الرسومات في دليل آخر ، وهو ما آخر for البيان هو ل.

لاحظ أنني لست مهتما بالتحسينات على البرنامج النصي حتى تلك النقطة.لقد تم فحصها كطريقة مطلوبة لإجراء التحديث في هذه البيئة.

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

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

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

المحلول

قد تكون قادرا على الابتعاد عن استخدام xcopy و لها /D التبديل ، الذي ينسخ فقط الملفات المصدر الأحدث من الملفات الموجودة في الوجهة.

نصائح أخرى

ليس لدي أي فكرة عن بناء جملة ملفات دفعة ويندوز ، ولكن ميركوريال hg status --rev REV هو على الارجح ما كنت تبحث عن:

@echo off
cd \dokuwiki\data\directory

ORIG_REV = hg log --rev . --template="{node}"

start /wait cmd.exe /c hg update
start /wait cmd.exe /c hg resolve -m -a
start /wait cmd.exe /c hg resolve -a
start /wait cmd.exe /c hg commit -A -m "Automated commit"

CHANGED_FILES = hg status --no-status --added --modified --rev ORIG_REV -I '*.jpg' -I '*.png' -I '*.gif'

for /r %%x in (CHANGED_FILES) do copy /y "%%x" ..\..\media\directory
مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top