diff --git a/README.md b/README.md index 85bc213..edf5209 100644 --- a/README.md +++ b/README.md @@ -55,7 +55,7 @@ photocalog -target ./photos/ ./sync/photos/* ### Monitor #### Copy files (make a COW if fs supports it) ```bash -photocalog -mode copy -target ./photos/ ./sync/photos/* +photocalog -mode copy -target ./photos -monitor ./sync/photos/* ``` #### Create hardlinks (only withing one disk partition) diff --git a/cmd/photocatalog/photocatalog.go b/cmd/photocatalog/photocatalog.go index fae00d0..75f45ab 100644 --- a/cmd/photocatalog/photocatalog.go +++ b/cmd/photocatalog/photocatalog.go @@ -19,6 +19,7 @@ func main() { mode := flag.String("mode", "hardlink", "Manage mode: copy or hardlink") target := flag.String("target", "./", "Root directory to organize files in") monitor := flag.String("monitor", "", "Monitor specified folder for new files") + updateMtime := flag.Bool("update_mtime", false, "Update mtime on organized files to be equal to the files creation date") flag.Parse() args := flag.Args() @@ -34,7 +35,7 @@ func main() { log.Fatalf("Invalid mode %s", *mode) } - mgr, err := manager.NewManager(*target, manageMode) + mgr, err := manager.NewManager(*target, manageMode, *updateMtime) if err != nil { log.Fatalf(err.Error()) } diff --git a/pkg/manager/manager.go b/pkg/manager/manager.go index c26809d..f6cba10 100644 --- a/pkg/manager/manager.go +++ b/pkg/manager/manager.go @@ -7,6 +7,7 @@ import ( "os/exec" "path" "strings" + "time" "github.com/pkg/errors" @@ -14,18 +15,20 @@ import ( ) type Manager struct { - TargetPath string - Mode ManageMode + TargetPath string + Mode ManageMode + updateMtime bool processor func(fp, targetDir string) (string, error) extractorsCache map[string]metadata.Extractor } -func NewManager(target string, mode ManageMode) (*Manager, error) { +func NewManager(target string, mode ManageMode, updateMtime bool) (*Manager, error) { manager := Manager{ - TargetPath: target, - Mode: mode, - processor: nil, + TargetPath: target, + Mode: mode, + processor: nil, + updateMtime: updateMtime, } if err := manager.initProcessor(); err != nil { return nil, err @@ -123,6 +126,13 @@ func (m *Manager) Manage(fp string) error { return errors.WithMessagef(err, "failed to process %s to %s", fp, targetDir) } + if m.updateMtime { + err = os.Chtimes(target, time.Now(), md.Time) + if err != nil { + return errors.WithMessage(err, "failed to update mtime/atime") + } + } + if m.Mode == Hardlink { log.Println(fp, "linked to", target) } else if m.Mode == Copy {