Restic: السماح بالاختلاط بتضمين واستبعاد أنماط للنسخ الاحتياطي والاستعادة

تم إنشاؤها على ١٨ يوليو ٢٠١٥  ·  17تعليقات  ·  مصدر: restic/restic

هذه مشكلة متابعة لـ # 226. حتى الآن ، من الممكن فقط تحديد أنماط الاستبعاد للنسخ الاحتياطي والاستعادة.

هناك حالات استخدام لم يتم تناولها ، على سبيل المثال: قد يرغب المستخدم في عمل نسخة احتياطية من الدليل الرئيسي الخاص به على /home/user ، باستثناء أي شيء من الدليل work باستثناء ملفات المصدر C.

هل هناك أي استخدامات أخرى لم أفكر بها؟

واجهة التطبيق / المستخدم: اسمح بتحديد أنماط --include و --exclude في سطر الأوامر ، والتي تملأ قائمة مشتركة (الترتيب مهم هنا). لكل ملف / دير ، تحقق من جميع الأنماط في القائمة. يربح إجراء (استبعاد أو تضمين) آخر نمط غير متماسك. الإجراء الافتراضي (الذي سيتم استخدامه أيضًا إذا لم يتم تحديد أنماط التضمين أو الاستبعاد) هو "include".

يحتوي هذا بالفعل على حالة زاوية: هل يجب على restic السير /home/user/work على الإطلاق؟

أعتقد أنه لا ينبغي. بدلاً من ذلك ، إذا كان هذا سلوكًا مرغوبًا فيه ، اطلب من المستخدم إضافة نمط أكثر تحديدًا للإشارة إلى أنه يجب أيضًا السير في الدليل المستبعد ، على سبيل المثال restic backup --exclude /home/user/work --include /home/user/work/**/*c. /home/user .

ستكون واجهة المستخدم الأفضل هي السماح بتحديد ملف لقراءة الأنماط من ( --pattern-file أو شيء من هذا القبيل). في هذا الملف ، جميع الأسطر التي تبدأ بـ # عبارة عن تعليقات ، ويتم تجاهل الأسطر الفارغة ، ويجب أن تبدأ جميع الأسطر الأخرى إما بـ + (include) أو - (استبعاد) بعد مسافة شخصية ونمط. بالنسبة لحالة الاستخدام أعلاه ، سيبدو ملف المرشح كما يلي:

# filter out everything from work, but include c source code files
- /home/user/work
+ /home/user/work/**/*.c

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

backup restore feature enhancement

التعليق الأكثر فائدة

لماذا لا تستخدم فقط تنسيق التجاهل القياسي الذي يستخدمه .gitignore ؟ على سبيل المثال

# ignore everything
*
# include $HOME/.local
!$HOME/.local

ال 17 كومينتر

الاحتمال الآخر هو قراءة قائمة دقيقة بالملفات للنسخ الاحتياطي من ملف (أو من stdin). ثم يمكن للأشخاص استخدام أي أدوات يريدون (العثور عليها ، grep ، وما إلى ذلك) لبناء قائمتهم و "توجيه" تلك القائمة لإعادة ضبطها.

يجب أن أقرأ النص بالكامل قبل إرسال الرد. آسف.

هذه مشكلة مختلفة ، مع أخذ قائمة الملفات / dirs للنسخ الاحتياطي من stdin بدلاً من وسيطات سطر الأوامر. هل تعتقد أنه من المفيد الحصول على ذلك؟ إذا كان الأمر كذلك ، هل يمكنك إضافة مشكلة؟

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

ربما يجب عليك فقط نسخ rsync's --exclude / - include / --lusion-from syntax ، فلديهم 20 عامًا من الخبرة :-)
(يرجى على الأقل إضافة بعض الأمثلة للصيغة الحالية إلى دليل المستخدم لأنه من غير الواضح ما إذا كان "/ foo" و "foo" هو نفسه أو ما إذا كان "* .c" مدعومًا.

آه ، شكرًا على التعليق ، لقد أضفت مشكلة للأمثلة المفقودة في الدليل: https://github.com/restic/restic/issues/396

لأكون صادقًا ، لا أحب بنية المرشح من rsync على الإطلاق ، لأن القواعد معقدة للغاية. لكننا سنرى ما يمكننا التوصل إليه.

أي تحديثات؟ إنه بالتأكيد خيار لا بد منه. حاليًا لا يمكن قراءة قائمة الملفات لعمل نسخة احتياطية من stdin:

$ find -name '*.go' | restic backup --files-from -
open -: no such file or directory

بينما يمكن كتابتها كـ

restic backup --exclude '*' --include '*.go'

Uhm ، يمكن قراءة قائمة الملفات من stdin عن طريق استدعاء restic على النحو التالي:

$ find -name '*.go' | restic backup --files-from /dev/stdin

إذا كنت ترغب في ذلك ، فأنا أقبل PR الذي يضيف معالجة - مقابل --files-from . :)

opennota هل تمانع في وصف حالة الاستخدام الخاصة بك؟ سيكون ممتعًا بالنسبة لنا.

يتم تتبع مشكلة الشرطة ( - ) على أنها # 769.

@ fd0
ليس الكثير من حالة الاستخدام. أريد فقط إجراء نسخ احتياطي للملفات ذات الامتدادات المعينة دون استخدام ملف مؤقت للقائمة.

إذا كنت ترغب في ذلك ، فأنا أقبل علاقات عامة تضيف معالجة - للملفات - من. :)

سوف اري ماذا يمكنني ان افعل.

يمكنك محاكاة هذا السلوك باستخدام sed وتوجيهات مسماة:

restic --exclude-file <(sed -n 's/^- \(.*\)/\1/p' files.list) --files-from <(sed -n 's/^+ \(.*\)/\1/p' files.list)

يتم استبعاد الخطوط التي تبدأ بـ - + ويتم تضمين الخطوط التي تبدأ بـ - + .

أعتقد أن النموذج الجيد هو ما طبقه borg مؤخرًا من أجل - نمط و - أنماط - من
https://borgbackup.readthedocs.io/en/stable/usage/help.html#borg -help-Patterns
ليس هناك الكثير من محددات الأنماط المختلفة ، ولكن الخيارات لتحديد مسارات الجذر ، وتشمل القواعد ، واستبعاد القواعد ، وقواعد الاستبعاد غير المتكررة في الملف.

لماذا لا تستخدم فقط تنسيق التجاهل القياسي الذي يستخدمه .gitignore ؟ على سبيل المثال

# ignore everything
*
# include $HOME/.local
!$HOME/.local

- من المقرر أن يتم تنفيذ - تضمين؟

يبدو أن --include and --exclude لا يمكن تنفيذه معًا ، أو على الأقل سيكون تسلسلًا هرميًا للأولوية مع أحدهما على الآخر ...

لا يؤدي توفير قائمة بالملفات باستخدام --files-from حل المشكلة تمامًا لأن الأمر الفرعي snapshots سيعرض قائمة ضخمة من الملفات والأمر الفرعي forget لا يعمل كما هو متوقع.

حالة الاستخدام الخاصة بي هي نسخ منزلي احتياطيًا ولدي قائمة من المسارات مع بعض الاستثناءات وبعض الاستثناءات للاستثناء. تحتوي القائمة الأساسية للمسارات بالفعل على مئات العناصر. نظرًا لأن كل شيء أقل من $HOME ، أتوقع أن أكون قادرًا على قول شيء مثل --exclude=** --include=~/path1 --include=~/path2 --exclude=~/path2/something --exclude=*~ . لذلك ، لتحديد ما إذا كان يجب تضمين المسار ، يجب مطابقته مقابل كل --exclude و --include بالترتيب الصحيح وآخر فوز مطابق.

أعتقد أن العلاقات العامة الخاصة بـ vincentbernat هي حل فعال لهذا المطلب.

_Summary: اسمح للأنماط السلبية بنمط gitignore بتحديد قواعد الاستبعاد لكل من النسخ الاحتياطي والاستعادة.

لقد كنت أستخدمه بشكل فعال لعدة أسابيع حتى الآن.

والجدير بالذكر أن هذا يمكّنني من تبسيط قائمة اللقطات الخاصة بي ، والتي كانت مطولة تمامًا في السابق:

b951f6a2  2019-06-15 11:30:18  elvandar    manual      /Users/daniel/Desktop
                                                       /Users/daniel/Documents
                                                       <lots more...>

إلى:

d0c0bed1  2019-06-18 08:20:57  elvandar                /Users/daniel

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

هل كانت هذه الصفحة مفيدة؟
0 / 5 - 0 التقييمات