From 7b19e43284c0fa95a6103b316f0e26a093c74944 Mon Sep 17 00:00:00 2001 From: brstgt Date: Thu, 21 Dec 2017 21:00:34 +0100 Subject: [PATCH] extend export command to show tombstone + change output format to CSV --- weed/command/export.go | 39 ++++++++++++++++++++++++++++----------- 1 file changed, 28 insertions(+), 11 deletions(-) diff --git a/weed/command/export.go b/weed/command/export.go index 0f7496472..1ac029cca 100644 --- a/weed/command/export.go +++ b/weed/command/export.go @@ -52,6 +52,7 @@ var ( output = cmdExport.Flag.String("o", "", "output tar file name, must ends with .tar, or just a \"-\" for stdout") format = cmdExport.Flag.String("fileNameFormat", defaultFnFormat, "filename formatted with {{.Mime}} {{.Id}} {{.Name}} {{.Ext}}") newer = cmdExport.Flag.String("newer", "", "export only files newer than this time, default is all files. Must be specified in RFC3339 without timezone, e.g. 2006-01-02T15:04:05") + showDeleted = cmdExport.Flag.Bool("deleted", false, "export deleted files. only applies if -o is not specified") tarOutputFile *tar.Writer tarHeader tar.Header @@ -62,6 +63,24 @@ var ( localLocation, _ = time.LoadLocation("Local") ) +func printNeedle(vid storage.VolumeId, n *storage.Needle, version storage.Version, deleted bool) { + key := storage.NewFileIdFromNeedle(vid, n).String() + size := n.DataSize + if version == storage.Version1 { + size = n.Size + } + fmt.Printf("%s;%s;%d;%t;%s;%d;%s;%t\n", + key, + n.Name, + size, + n.IsGzipped(), + n.Mime, + n.LastModified, + n.Ttl.String(), + deleted, + ) +} + func runExport(cmd *Command, args []string) bool { var err error @@ -125,6 +144,10 @@ func runExport(cmd *Command, args []string) bool { var version storage.Version + if tarOutputFile == nil { + fmt.Printf("key;name;size;gzip;mime;modified;ttl;deleted\n") + } + err = storage.ScanVolumeFile(*export.dir, *export.collection, vid, storage.NeedleMapInMemory, func(superBlock storage.SuperBlock) error { @@ -143,6 +166,10 @@ func runExport(cmd *Command, args []string) bool { return walker(vid, n, version) } if !ok { + if *showDeleted && tarOutputFile == nil && n.DataSize > 0 { + printNeedle(vid, n, version,true) + } + glog.V(2).Infof("This seems deleted %d size %d", n.Id, n.Size) } else { glog.V(2).Infof("Skipping later-updated Id %d size %d", n.Id, n.Size) @@ -197,17 +224,7 @@ func walker(vid storage.VolumeId, n *storage.Needle, version storage.Version) (e } _, err = tarOutputFile.Write(n.Data) } else { - size := n.DataSize - if version == storage.Version1 { - size = n.Size - } - fmt.Printf("key=%s Name=%s Size=%d gzip=%t mime=%s\n", - key, - n.Name, - size, - n.IsGzipped(), - n.Mime, - ) + printNeedle(vid, n, version, false) } return }