mirror of
https://github.com/derfenix/photocatalog.git
synced 2026-03-12 07:40:29 +03:00
Allow to update organized file's mtime corresponding to the original file's creation date
This commit is contained in:
@@ -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)
|
||||
|
||||
@@ -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())
|
||||
}
|
||||
|
||||
@@ -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 {
|
||||
|
||||
Reference in New Issue
Block a user