هذه مشكلة متابعة لـ # 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
يمكن إغلاق هذه المشكلة بمجرد تنفيذ حل نهائي لوجود أنماط التضمين والاستبعاد.
الاحتمال الآخر هو قراءة قائمة دقيقة بالملفات للنسخ الاحتياطي من ملف (أو من 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
أيضًا ، لقد قمت بتطبيق حل فعال (ليس مثاليًا ولكنه يعمل) يوفر نسخًا احتياطيًا مستمرًا باستخدام هذه الميزة (سأشارك التفاصيل قريبًا).
التعليق الأكثر فائدة
لماذا لا تستخدم فقط تنسيق التجاهل القياسي الذي يستخدمه
.gitignore
؟ على سبيل المثال