README | 2 +- main.go | 15 ++++++--------- diff --git a/README b/README index f8b2b8a7b0eafc769c8e661a228126600c99e42f..56beec94e99a44c33ef68a54f9e3b1461720471b 100644 --- a/README +++ b/README @@ -68,7 +68,7 @@ TWO PASS MODE ============= $ sgodup -basedir DIR -dupdir DIR -action ns [-minsize NNN] [-chmod NNN] > state -$ sgodup -action ACTION [-fsync] -ns state +$ sgodup -action ACTION [-fsync] -ns < state If you are dealing with huge amount of small files, then simultaneous reading (duplicate detection) and writing (duplicate files linking) on diff --git a/main.go b/main.go index 9c5382ce03f79d536422e03e383a7c403cfe6faa..e9fcf7ea1a1e50906f976b3c7fbfe55b53e519e2 100644 --- a/main.go +++ b/main.go @@ -39,7 +39,7 @@ "golang.org/x/crypto/blake2b" ) const ( - Version = "0.1.0" + Version = "0.2.0" SectorSize = 1 << 12 // 4 KiB sector size BufSize = 1 << 17 // ZFS default 128 KiB recordsize @@ -63,7 +63,7 @@ dupDir = flag.String("dupdir", "", "Directory with possible duplicates") actionS = flag.String("action", "", "print, ns, symlink, hardlink") minSize = flag.Int64("minsize", 1, "minimal file size") chmod = flag.String("chmod", "", "chmod files") - nsPath = flag.String("ns", "", "link targets from netstring file") + doNS = flag.Bool("ns", false, "link targets from netstring read from stdin") fsync = flag.Bool("fsync", false, "fsync directories?") version = flag.Bool("version", false, "Print version information") warranty = flag.Bool("warranty", false, "Print warranty information") @@ -142,7 +142,7 @@ %s -basedir DIR -dupdir DIR -action {print,ns,symlink,hardlink} [-chmod XXX] [-minsize XXX] [-fsync] Two pass mode: %s -basedir DIR -dupdir DIR -action ns [-chmod XXX] [-minsize XXX] > state - %s -action {print,symlink,hardlink} [-fsync] -ns state + %s -action {print,symlink,hardlink} [-fsync] -ns < state Options: `, os.Args[0], os.Args[0], os.Args[0]) @@ -184,17 +184,14 @@ default: log.Fatalln("invalid action") } - if *nsPath != "" { + if *doNS { if action == ActNS { log.Fatalln("\"-action ns\" has no meaning with -ns") } - fd, err := os.Open(*nsPath) - if err != nil { - log.Fatal(err) - } - nsR := netstring.NewReader(bufio.NewReaderSize(fd, BufSize)) + nsR := netstring.NewReader(bufio.NewReaderSize(os.Stdin, BufSize)) pathDup := make([]byte, 1<<10) pathOrig := make([]byte, 1<<10) + var err error var pathDupLen, pathOrigLen uint64 files := 0 fullSize := int64(0)