mirror of
https://github.com/derfenix/photocatalog.git
synced 2026-03-11 21:35:34 +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
|
### Monitor
|
||||||
#### Copy files (make a COW if fs supports it)
|
#### Copy files (make a COW if fs supports it)
|
||||||
```bash
|
```bash
|
||||||
photocalog -mode copy -target ./photos/ ./sync/photos/*
|
photocalog -mode copy -target ./photos -monitor ./sync/photos/*
|
||||||
```
|
```
|
||||||
|
|
||||||
#### Create hardlinks (only withing one disk partition)
|
#### Create hardlinks (only withing one disk partition)
|
||||||
|
|||||||
@@ -19,6 +19,7 @@ func main() {
|
|||||||
mode := flag.String("mode", "hardlink", "Manage mode: copy or hardlink")
|
mode := flag.String("mode", "hardlink", "Manage mode: copy or hardlink")
|
||||||
target := flag.String("target", "./", "Root directory to organize files in")
|
target := flag.String("target", "./", "Root directory to organize files in")
|
||||||
monitor := flag.String("monitor", "", "Monitor specified folder for new files")
|
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()
|
flag.Parse()
|
||||||
args := flag.Args()
|
args := flag.Args()
|
||||||
@@ -34,7 +35,7 @@ func main() {
|
|||||||
log.Fatalf("Invalid mode %s", *mode)
|
log.Fatalf("Invalid mode %s", *mode)
|
||||||
}
|
}
|
||||||
|
|
||||||
mgr, err := manager.NewManager(*target, manageMode)
|
mgr, err := manager.NewManager(*target, manageMode, *updateMtime)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
log.Fatalf(err.Error())
|
log.Fatalf(err.Error())
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -7,6 +7,7 @@ import (
|
|||||||
"os/exec"
|
"os/exec"
|
||||||
"path"
|
"path"
|
||||||
"strings"
|
"strings"
|
||||||
|
"time"
|
||||||
|
|
||||||
"github.com/pkg/errors"
|
"github.com/pkg/errors"
|
||||||
|
|
||||||
@@ -16,16 +17,18 @@ import (
|
|||||||
type Manager struct {
|
type Manager struct {
|
||||||
TargetPath string
|
TargetPath string
|
||||||
Mode ManageMode
|
Mode ManageMode
|
||||||
|
updateMtime bool
|
||||||
|
|
||||||
processor func(fp, targetDir string) (string, error)
|
processor func(fp, targetDir string) (string, error)
|
||||||
extractorsCache map[string]metadata.Extractor
|
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{
|
manager := Manager{
|
||||||
TargetPath: target,
|
TargetPath: target,
|
||||||
Mode: mode,
|
Mode: mode,
|
||||||
processor: nil,
|
processor: nil,
|
||||||
|
updateMtime: updateMtime,
|
||||||
}
|
}
|
||||||
if err := manager.initProcessor(); err != nil {
|
if err := manager.initProcessor(); err != nil {
|
||||||
return nil, err
|
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)
|
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 {
|
if m.Mode == Hardlink {
|
||||||
log.Println(fp, "linked to", target)
|
log.Println(fp, "linked to", target)
|
||||||
} else if m.Mode == Copy {
|
} else if m.Mode == Copy {
|
||||||
|
|||||||
Reference in New Issue
Block a user