mirror of
https://github.com/octoleo/restic.git
synced 2024-11-22 04:45:15 +00:00
Support for pattern in restore command
This just matches the passed pattern against the full source path with filepath.Match which, in contrast go filepath.Glob, doesn't match the directory separator with '*' and is not terribly useful that way. Someone should replace that by a more sophisticated matcher.
This commit is contained in:
parent
bd43e27deb
commit
b1dbc6f062
@ -3,6 +3,7 @@ package main
|
|||||||
import (
|
import (
|
||||||
"fmt"
|
"fmt"
|
||||||
"os"
|
"os"
|
||||||
|
"path/filepath"
|
||||||
|
|
||||||
"github.com/restic/restic"
|
"github.com/restic/restic"
|
||||||
"github.com/restic/restic/backend"
|
"github.com/restic/restic/backend"
|
||||||
@ -21,11 +22,11 @@ func init() {
|
|||||||
}
|
}
|
||||||
|
|
||||||
func (cmd CmdRestore) Usage() string {
|
func (cmd CmdRestore) Usage() string {
|
||||||
return "snapshot-ID TARGETDIR"
|
return "snapshot-ID TARGETDIR [PATTERN]"
|
||||||
}
|
}
|
||||||
|
|
||||||
func (cmd CmdRestore) Execute(args []string) error {
|
func (cmd CmdRestore) Execute(args []string) error {
|
||||||
if len(args) != 2 {
|
if len(args) < 2 || len(args) > 3 {
|
||||||
return fmt.Errorf("wrong number of arguments, Usage: %s", cmd.Usage())
|
return fmt.Errorf("wrong number of arguments, Usage: %s", cmd.Usage())
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -64,6 +65,18 @@ func (cmd CmdRestore) Execute(args []string) error {
|
|||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// TODO: a filter against the full path sucks as filepath.Match doesn't match
|
||||||
|
// directory separators on '*'. still, it's better than nothing.
|
||||||
|
if len(args) > 2 {
|
||||||
|
res.Filter = func(item string, dstpath string, node *restic.Node) bool {
|
||||||
|
matched, err := filepath.Match(item, args[2])
|
||||||
|
if err != nil {
|
||||||
|
panic(err)
|
||||||
|
}
|
||||||
|
return matched
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
fmt.Printf("restoring %s to %s\n", res.Snapshot(), target)
|
fmt.Printf("restoring %s to %s\n", res.Snapshot(), target)
|
||||||
|
|
||||||
err = res.RestoreTo(target)
|
err = res.RestoreTo(target)
|
||||||
|
Loading…
Reference in New Issue
Block a user