diff --git a/changelog/unreleased/pull-3943 b/changelog/unreleased/pull-3943 new file mode 100644 index 000000000..e8f9b5c8f --- /dev/null +++ b/changelog/unreleased/pull-3943 @@ -0,0 +1,9 @@ +Enhancement: Ignore additional files in repository + +Some commands like `find` and `restore` could become confused by additional +files in the repository. This could cause restic to fail with an `multiple IDs +with prefix "12345678" found` error. These commands now ignore additional +files. + +https://github.com/restic/restic/pull/3943 +https://forum.restic.net/t/which-protocol-should-i-choose-for-remote-linux-backups/5446/17 diff --git a/internal/restic/backend_find.go b/internal/restic/backend_find.go index b85cc9199..4be2f523f 100644 --- a/internal/restic/backend_find.go +++ b/internal/restic/backend_find.go @@ -3,6 +3,8 @@ package restic import ( "context" "fmt" + + "github.com/restic/restic/internal/debug" ) // A MultipleIDMatchesError is returned by Find() when multiple IDs with a @@ -31,6 +33,13 @@ func Find(ctx context.Context, be Lister, t FileType, prefix string) (string, er defer cancel() err := be.List(ctx, t, func(fi FileInfo) error { + // ignore filename which are not an id + _, err := ParseID(fi.Name) + if err != nil { + debug.Log("unable to parse %v as an ID", fi.Name) + return nil + } + if len(fi.Name) >= len(prefix) && prefix == fi.Name[:len(prefix)] { if match == "" { match = fi.Name