Restic: 除外ファイル構文のドキュメントが見つかりません

作成日 2017年06月08日  ·  17コメント  ·  ソース: restic/restic

除外ファイルの構文がどのように解析されるかについてのドキュメントが見つからないようです。

つまり、ワイルドカードをサポートしていますか? 正規表現? ファイルとディレクトリをどのように区別しますか? パスプレフィックスは必要ですか? どこから(cwd /または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-*は、 .Trash-.Trash-foobarなどの名前のファイル/ディレクトリを除外します。
  • .tmp$は、文字通り.tmp$という名前のすべてのファイル/ディレクトリを除外します。つまり、ドット、 tmp 、ドル記号が続きます。 正規表現の拡張はありません。
  • ~$は、文字通りチルダドルという名前のすべてのファイル/ディレクトリを除外します。 チルダで終わるすべてのファイル/ディレクトリを除外するには、 *~ます。
  • ~/.cacheは、チルダと呼ばれるすべてのディレクトリのディレクトリ.cacheを除外します。 ホームディレクトリのキャッシュディレクトリのみを除外するには、 $HOME/.cache使用します(チルダは展開されません。環境変数は展開されますが、 --exclude-fileを介して読み取られたファイルでのみ、コマンドラインでシェルが展開されます。どちらも)。
  • /full/path/to/directory/.syncthing/index*は、 indexより下の/full/path/to/directory/.syncthing index始まる名前のすべてのものを除外します。

全てのコメント17件

こんにちは、見たことがありますか

パターンは内部でfilepath.Globを使用します。構文については、filepath.Matchを参照してください。 さらに、**は任意のサブディレクトリを除外します。 除外ファイルの環境変数は、os.ExpandEnvで展開されます。

https://github.com/restic/restic/blob/master/doc/manual.rst?

これはあなたの質問に答えるべきだと思います。

私はgolangのドキュメントを読みましたが、エンドユーザー(me!)は、エクスクルードを内部と比較しているリポジトリが何であるかを知らないと思います-それはフルパス(例:/ home / me / blah)ですか、それともからのパスですか?リポジトリルート(/ blahまたはblah)、またはcwd(/ homeにいるときのme / blah)に関連していますか?

この問題を提起していただきありがとうございます、私はあなたが有効なポイントを持っていると思います。 マニュアルでは、godoc.orgを参照せずに除外フィルターについて説明する必要があり、さらに多くの例が必要です。

すでにいくつかの質問に答えるには:

  • すべてのパターンは、保存するファイル/ディレクトリのフルパスに対してテストされます
  • 相対パス/パターンは、保存するパスの下の任意の場所に一致します
  • 現時点では、ファイルとディレクトリを区別する方法がないため、 --exclude fooは、 fooという名前のファイルとディレクトリを除外します。 同じことが--exclude foo/ます。

除外ファイルから:

  • ._*は、名前がドットとアンダースコアで始まるすべてのファイルとディレクトリに一致します
  • desktop.iniは、 desktop.iniと呼ばれるすべてのファイルと正確に一致します。 したがって、 desktop.ini.bakは除外されず、スナップショットに保存されません。
  • .Trash-*は、 .Trash-.Trash-foobarなどの名前のファイル/ディレクトリを除外します。
  • .tmp$は、文字通り.tmp$という名前のすべてのファイル/ディレクトリを除外します。つまり、ドット、 tmp 、ドル記号が続きます。 正規表現の拡張はありません。
  • ~$は、文字通りチルダドルという名前のすべてのファイル/ディレクトリを除外します。 チルダで終わるすべてのファイル/ディレクトリを除外するには、 *~ます。
  • ~/.cacheは、チルダと呼ばれるすべてのディレクトリのディレクトリ.cacheを除外します。 ホームディレクトリのキャッシュディレクトリのみを除外するには、 $HOME/.cache使用します(チルダは展開されません。環境変数は展開されますが、 --exclude-fileを介して読み取られたファイルでのみ、コマンドラインでシェルが展開されます。どちらも)。
  • /full/path/to/directory/.syncthing/index*は、 indexより下の/full/path/to/directory/.syncthing index始まる名前のすべてのものを除外します。

ありがとう@ fd0

したがって、「現在のディレクトリ」とは、バックアップを起動したときにいたディレクトリを意味するのではなく、現在ファイルを調べているディレクトリを意味します(スラッシュで始まる除外を除く)。 とった。

ファイルとディレクトリの動作は少し予想外です。-excludefoo/はディレクトリをバックアップしますが、内容はバックアップしないと予想しましたが、-excludefooはどちらもバックアップしません。 理由はわかりませんが、rsyncから推測します。

私の例は重要なものを見逃しました:スペース! それらとシェルのメタ文字をバックスラッシュでエスケープする必要があると思います。

私はこれらのものをたくさんコピーすることになりました: https

除外ファイルにコメントを含めることはできますか? 編集: httpsます

ああ、それはまだ完全には正しくないのではないかと思います。 resticが除外パターンを評価する方法について説明します。 次のように、resticがホームディレクトリ( /home/user )のユーザーによって実行されていると仮定します。

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

次に、resticは次のコマンドライン引数を表示します(シェルによる拡張後)。

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

次に、 /home/userトラバースを開始します。 次のリストは、指定されたファイル/ディレクトリが表示されたときに何が起こるかを示しています。 resticは常にパターンに対して完全なパスをテストします。

  • file /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は保存されません。

これがもう少し明確になることを願っています。プロセスを説明するセクションをマニュアルに追加します。 重要なポイントは、バックアップ中にファイルのフルパスに対してパターンが評価されることです。 したがって、単一のディレクトリに一致させる場合は、完全なパスを使用してください。一致しない場合は、どこかで数回一致する可能性があります。

他に質問はありますか? :)

さらに質問がありますが、お時間を割いてお答えいただき、誠にありがとうございます。 これは、パターンの自動マジックアンカーについての1つの質問です。 私は答えを推測できると思います(私たちは絶対パスがかなりユニークであり、私たちが望む振る舞いを与えることに依存しています)が、尋ねて確認するのが最善です。

絶対パターン/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を使用してルートディレクトリをマークしています。 パターンがファイル名に含まれていないことがわかります。

    • [ROOT, "home", "user", "secret2"]分割されているファイル/home/user/secret2見てみましょう。 ここでも、パターンがファイル名に含まれていないことがわかります。

  • [ROOT, "home", "user", "secret", "secret.txt"]分割されたファイル/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と一致します。

これらの例はすべて、私が思うマニュアルに文書化する必要があります。

ガッチャ。 ありがとう。

負の除外は、可能性のあるala .gitignoreを除外しますか?
ネストされたディレクトリ.meteor / local / dbを除いて、.meteorという名前のディレクトリ内のすべてのコンテンツを除外したい場合、これを実行できますか?

/ etc / restic / excludes:
.meteor/ !.meteor/local/db
restic backup exclude-file=/etc/restic/excludes

いいえ、まだ実装されていません。

包含/除外の例の文書化は#396で追跡されています。ここで、この問題を閉じます。

@ fd0以下のjobs / / jobs / / builds / ** / archiveのようなパスを除外して、すべてのディレクトリからアーカイブディレクトリを除外しようとしています。 そして、私は除外する必要があるこのような複数のパスを持っています、可能であれば、ドキュメントでそのような種類の例を見つけることができないので、この種類に対処するための最良の方法を提案できますか?

このページは役に立ちましたか?
0 / 5 - 0 評価