Restic: لا يمكن العثور على مستندات لبنية ملف الاستثناء

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

لا يمكنني العثور على أي مستندات حول كيفية تحليل بنية ملف الاستثناءات.

أي هل يدعم أحرف البدل؟ regex؟ كيف يفرق بين الملفات والدلائل؟ هل بادئات المسار مطلوبة؟ من أين (cwd / or root؟)؟

بعض الأمثلة:

.qiv-trash (directory that could be anywhere on the filesystem)
.DS_Store
lost+found/
._*
desktop.ini
Thumbs.db (file that could be anywhere on the filesystem)
.Trash-* (the asterisk could be any number, is it needed?)
.tmp$ (file ending in .tmp)
~$ (file ending in a tilde)
~/.cache/ (cache directory in user home dir, using tilde syntax)
/full/path/to/directory/.syncthing/index*
documentation wanted

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

للإجابة على بعض أسئلتك بالفعل:

  • يتم اختبار جميع الأنماط مقابل المسار الكامل لملف / دير ليتم حفظه
  • ستتطابق المسارات / الأنماط النسبية في أي مكان أسفل المسار المطلوب حفظه
  • في الوقت الحالي ، لا توجد طريقة للتمييز بين الملف والدليل ، لذا فإن --exclude foo سيستبعد أي ملفات وأدلة باسم foo . الشيء نفسه ينطبق على --exclude foo/ .

من ملف يستبعد:

  • ._* سيتطابق مع جميع الملفات والمجلدات التي يبدأ اسمها بنقطة وشرطة سفلية
  • desktop.ini سيتطابق تمامًا مع جميع الملفات المسماة desktop.ini . لذلك لم يتم استبعاد desktop.ini.bak وحفظها في اللقطة.
  • .Trash-* يستثني الملفات / dirs المسماة .Trash- ، .Trash-foobar ، إلخ.
  • يستثني .tmp$ جميع الملفات / dirs المسماة حرفياً .tmp$ ، وهي نقطة ، متبوعة بـ tmp ، متبوعة بعلامة الدولار. لا يوجد توسيع regexp.
  • يستثني ~$ جميع الملفات / dirs المسماة حرفياً بالدولار. لاستبعاد جميع الملفات / dirs المنتهية بالتلدة ، استخدم *~ .
  • ~/.cache يستثني الدليل .cache في كل الدلائل التي تسمى التلدة. لاستبعاد دليل ذاكرة التخزين المؤقت في الدليل الرئيسي الخاص بك فقط ، استخدم $HOME/.cache (لم يتم توسيع التيلدا ، متغيرات البيئة موجودة ، ولكن فقط في ملف تمت قراءته عبر --exclude-file ، في سطر الأوامر تتوسع shell على حد سواء).
  • يستثني /full/path/to/directory/.syncthing/index* كل الأشياء ذات الأسماء التي تبدأ بـ index أقل من /full/path/to/directory/.syncthing .

ال 17 كومينتر

مرحبا هل رأيت

تستخدم الأنماط filepath.Glob داخليًا ، راجع filepath.Match للحصول على بناء الجملة. بالإضافة إلى ذلك ** يستبعد الدلائل الفرعية التعسفية. يتم توسيع متغيرات البيئة في ملفات الاستبعاد باستخدام os.ExpandEnv.

في https://github.com/restic/restic/blob/master/doc/manual.rst؟

أعتقد أن هذا يجب أن يجيب على أسئلتك.

ذهبت إلى الوثائق على https://restic.readthedocs.io/en/latest/manual.html وبحثت عن استبعاد ، حيث لا يتضمن للأسف أي أمثلة شائعة (أو إشارة إلى الوثائق الأخرى في manual.rst ): /

قرأت مستند golang وأعتقد أن المستخدم النهائي (أنا!) لن يعرف ما الذي يقارن restic استبعادًا داخليًا - هل هو المسار الكامل (على سبيل المثال / home / me / blah) أم مسارًا من جذر المستودع (/ بلاه أو بلاه) ، أو نسبيًا لـ cwd (أنا / بلاه عندما أكون في المنزل)؟

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

للإجابة على بعض أسئلتك بالفعل:

  • يتم اختبار جميع الأنماط مقابل المسار الكامل لملف / دير ليتم حفظه
  • ستتطابق المسارات / الأنماط النسبية في أي مكان أسفل المسار المطلوب حفظه
  • في الوقت الحالي ، لا توجد طريقة للتمييز بين الملف والدليل ، لذا فإن --exclude foo سيستبعد أي ملفات وأدلة باسم foo . الشيء نفسه ينطبق على --exclude foo/ .

من ملف يستبعد:

  • ._* سيتطابق مع جميع الملفات والمجلدات التي يبدأ اسمها بنقطة وشرطة سفلية
  • desktop.ini سيتطابق تمامًا مع جميع الملفات المسماة desktop.ini . لذلك لم يتم استبعاد desktop.ini.bak وحفظها في اللقطة.
  • .Trash-* يستثني الملفات / dirs المسماة .Trash- ، .Trash-foobar ، إلخ.
  • يستثني .tmp$ جميع الملفات / dirs المسماة حرفياً .tmp$ ، وهي نقطة ، متبوعة بـ tmp ، متبوعة بعلامة الدولار. لا يوجد توسيع regexp.
  • يستثني ~$ جميع الملفات / dirs المسماة حرفياً بالدولار. لاستبعاد جميع الملفات / dirs المنتهية بالتلدة ، استخدم *~ .
  • ~/.cache يستثني الدليل .cache في كل الدلائل التي تسمى التلدة. لاستبعاد دليل ذاكرة التخزين المؤقت في الدليل الرئيسي الخاص بك فقط ، استخدم $HOME/.cache (لم يتم توسيع التيلدا ، متغيرات البيئة موجودة ، ولكن فقط في ملف تمت قراءته عبر --exclude-file ، في سطر الأوامر تتوسع shell على حد سواء).
  • يستثني /full/path/to/directory/.syncthing/index* كل الأشياء ذات الأسماء التي تبدأ بـ index أقل من /full/path/to/directory/.syncthing .

شكرا @ fd0

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

سلوك الملفات والدلائل غير متوقع إلى حد ما ، كنت أتوقع - exclude foo / لعمل نسخة احتياطية من الدليل ولكن ليس المحتويات ، بينما --exclude foo لإجراء نسخ احتياطي لأي منهما. لست متأكدًا من السبب ، من rsync أعتقد.

لقد فاتني مثال مهم: المساحات! أعتقد أنني بحاجة للهروب من هؤلاء وقصف الحروف الأولية بشرطة مائلة للخلف.

انتهى بي الأمر بنسخ الكثير من هؤلاء: https://gist.github.com/jult/e2eaedad6b9e29d95977fea0ddffae7d

هل التعليقات مسموح بها في ملف الاستثناءات؟ تحرير: https://github.com/restic/restic/pull/916/commits/c796d84fca48feea91ca3e85fbf38e16f764a468 يبدو أن التجزئة هي حرف التعليق.

آه ، أخشى أن هذا ما زال غير صحيح تمامًا. سأصف كيف يقيم restic أنماط الاستبعاد. لنفترض أن restic يديره مستخدم في دليل منزله ( /home/user ) مثل هذا:

$ restic backup --exclude='*.bak' --exclude='/home/user/secret' --exclude='extra' ~

ثم سيشاهد restic وسيطات سطر الأوامر التالية (بعد التوسيع بواسطة shell):

["restic", "backup", "--exclude='*.bak'", "--exclude='/home/user/secret'", "--exclude='extra'", "/home/user"]

بعد ذلك ، يبدأ في اجتياز /home/user . تصف القائمة التالية ما يحدث عند مشاهدة الملف / dir. يختبر restic دائمًا المسار الكامل مقابل الأنماط:

  • ملف /home/user/foo.bak : يتطابق النمط *.bak ولا يتم حفظ الملف. النمط ليس مطلقًا لذا فهو يتطابق في كل مكان لجميع الملفات التي تنتهي بـ .bak .
  • dir /home/user/secret : النمط المطلق /home/user/secret يطابق ، لذلك لا يتم حفظ dir ولا يتم اجتيازه
  • dir /home/user/foo/home/user/secret : لا يوجد نمط مطابق لذلك يتم حفظ dir.
  • dir /home/user/work/extra : النمط extra يطابق ، لا يتم حفظ dir.

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

أي أسئلة أخرى؟ :)

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

هل سيتطابق النمط المطلق /home/user/secret مع /home/user/secret2 ؟ (ماذا لو كنت لا تريد ذلك؟)
هل سيتطابق النمط المطلق /home/user/secret مع /home/user/somemount/home/user/secret ؟

في كلتا الحالتين: لا ، لن يتطابق النمط.

لماذا هذا؟ تحرير: يسعدني أنه لا يحدث ذلك ، لكنني لا أرى سبب ذلك :)

تم تصميم الكود المطابق على غرار ما ستفعله الصدفة: إذا سألت نفسك ، إذا كان الملف /home/user/secret2 موجودًا ، فماذا يمكن طباعة ls /home/user/secret (قدم الملف secret غير موجود)؟

بعبارات أكثر رسمية: إذا بدأ النمط بـ / فهو مطلق ويجب أن يتطابق النمط في بداية السلسلة قيد الاختبار ، لذا فإن النمط /home/user/secret لا يتطابق مع /home/user/somemount[...] : النمط ليس بادئة من السلسلة.

يمكنك أن تتخيل بنفسك أن النمط ومسار الملف منقسمان إلى مكونات كل منهما:

  • /home/user/secret مقسم إلى [ROOT, "home", "user", "secret"] والملف /home/user/somemount/home/user/secret مقسم إلى [ROOT, "home", "user", "somemount", "home", "user", "secret"] . تم استخدام السلسلة ROOT في هذا المثال لتمييز الدليل الجذر. يمكنك أن ترى أن النمط غير موجود في اسم الملف.

    • لنلق نظرة على الملف /home/user/secret2 ، الذي تم تقسيمه إلى [ROOT, "home", "user", "secret2"] . مرة أخرى يمكنك أن ترى أن النمط غير موجود في اسم الملف.

  • بالنسبة للملف /home/user/secret/secret.txt ، المقسم إلى [ROOT, "home", "user", "secret", "secret.txt"] يمكنك أن ترى أن النمط موجود بالفعل في اسم الملف ، تمامًا في البداية: [ROOT, "home", "user", "secret", ...] ، وبالتالي فإن النمط مطابق ويتم استبعاد الملف.
  • لنفترض أن لدينا نمط استبعاد نسبي secret/secret.txt ، مقسم إلى ["secret", "secret.txt"] . يمكنك أن ترى أن هذا النمط يمكن العثور عليه في قائمة الملف /home/user/secret/secret.txt ، بدءًا من الإزاحة 3: [ROOT, "home", "user", "secret", "secret.txt"] ، وبالتالي فإن النمط مطابق.

عندما يكون لديك أحرف بدل ( * ، ? وهكذا) في مكون المسار ، يتم اختبارها أيضًا. لذا بالنسبة للمثال الأول ، فإن النمط /home/user/secret* سيطابق المسار /home/user/secret2 .

يجب أن تكون كل هذه الأمثلة موثقة في الدليل على ما أعتقد.

مسكتك. شكرا.

هل الاستثناءات السلبية ممكنة علاء .gitignore؟
لنفترض أنني أريد استبعاد جميع المحتويات في الدلائل المسماة .meteor باستثناء dir .meteor / local / db المتداخلة ، فهل يمكنني القيام بذلك؟

/ etc / restic / يستبعد:
.meteor/ !.meteor/local/db
restic backup exclude-file=/etc/restic/excludes

لا ، لم يتم تنفيذ ذلك بعد.

يتم تتبع توثيق أمثلة التضمين / الاستبعاد في # 396 ، وأنا أغلق هذه المشكلة هنا.

@ fd0 أحاول استبعاد مسارات مثل الوظائف التالية / / jobs / / builds / ** / archive لاستبعاد أرشيف dir من جميع الدلائل التي ستعمل. ولدي مسارات متعددة مثل هذا أحتاج إلى استبعادها ، إذا أمكن ، هل يمكنك أن تقترح لي أفضل طريقة للتعامل مع هذا النوع حيث لا يمكنني العثور على أي مثال لهذا النوع في الوثائق

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