Implement rclone size for measuring remotes - fixes #153
This commit is contained in:
parent
4712043e26
commit
177dbbc29a
4 changed files with 55 additions and 8 deletions
|
@ -58,24 +58,29 @@ modification time or MD5SUM. Destination is updated to match
|
||||||
source, including deleting files if necessary. Since this can
|
source, including deleting files if necessary. Since this can
|
||||||
cause data loss, test first with the `--dry-run` flag.
|
cause data loss, test first with the `--dry-run` flag.
|
||||||
|
|
||||||
### rclone ls [remote:path] ###
|
### rclone ls remote:path ###
|
||||||
|
|
||||||
List all the objects in the the path with size and path.
|
List all the objects in the the path with size and path.
|
||||||
|
|
||||||
### rclone lsd [remote:path] ###
|
### rclone lsd remote:path ###
|
||||||
|
|
||||||
List all directories/containers/buckets in the the path.
|
List all directories/containers/buckets in the the path.
|
||||||
|
|
||||||
### rclone lsl [remote:path] ###
|
### rclone lsl remote:path ###
|
||||||
|
|
||||||
List all the objects in the the path with modification time,
|
List all the objects in the the path with modification time,
|
||||||
size and path.
|
size and path.
|
||||||
|
|
||||||
### rclone md5sum [remote:path] ###
|
### rclone md5sum remote:path ###
|
||||||
|
|
||||||
Produces an md5sum file for all the objects in the path. This
|
Produces an md5sum file for all the objects in the path. This
|
||||||
is in the same format as the standard md5sum tool produces.
|
is in the same format as the standard md5sum tool produces.
|
||||||
|
|
||||||
|
### rclone size remote:path ###
|
||||||
|
|
||||||
|
Prints the total size of objects in remote:path and the number of
|
||||||
|
objects.
|
||||||
|
|
||||||
### rclone mkdir remote:path ###
|
### rclone mkdir remote:path ###
|
||||||
|
|
||||||
Make the path if it doesn't already exist
|
Make the path if it doesn't already exist
|
||||||
|
|
|
@ -8,6 +8,7 @@ import (
|
||||||
"mime"
|
"mime"
|
||||||
"path"
|
"path"
|
||||||
"sync"
|
"sync"
|
||||||
|
"sync/atomic"
|
||||||
"time"
|
"time"
|
||||||
)
|
)
|
||||||
|
|
||||||
|
@ -680,6 +681,15 @@ func Md5sum(f Fs, w io.Writer) error {
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Count counts the objects and their sizes in the Fs
|
||||||
|
func Count(f Fs) (objects int64, size int64, err error) {
|
||||||
|
err = ListFn(f, func(o Object) {
|
||||||
|
atomic.AddInt64(&objects, 1)
|
||||||
|
atomic.AddInt64(&size, o.Size())
|
||||||
|
})
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
// ListDir lists the directories/buckets/containers in the Fs to the supplied writer
|
// ListDir lists the directories/buckets/containers in the Fs to the supplied writer
|
||||||
func ListDir(f Fs, w io.Writer) error {
|
func ListDir(f Fs, w io.Writer) error {
|
||||||
for dir := range f.ListDir() {
|
for dir := range f.ListDir() {
|
||||||
|
|
|
@ -583,7 +583,21 @@ func TestMd5sum(t *testing.T) {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func TestCount(t *testing.T) {
|
||||||
|
objects, size, err := fs.Count(fremote)
|
||||||
|
if err != nil {
|
||||||
|
t.Fatalf("Count failed: %v", err)
|
||||||
|
}
|
||||||
|
if objects != 2 {
|
||||||
|
t.Errorf("want 2 objects got %d", objects)
|
||||||
|
}
|
||||||
|
if size != 60 {
|
||||||
|
t.Errorf("want size 60 got %d", size)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
func TestCheck(t *testing.T) {
|
func TestCheck(t *testing.T) {
|
||||||
|
// FIXME
|
||||||
}
|
}
|
||||||
|
|
||||||
// Clean the temporary directory
|
// Clean the temporary directory
|
||||||
|
|
26
rclone.go
26
rclone.go
|
@ -109,7 +109,7 @@ var Commands = []Command{
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
Name: "ls",
|
Name: "ls",
|
||||||
ArgsHelp: "[remote:path]",
|
ArgsHelp: "remote:path",
|
||||||
Help: `
|
Help: `
|
||||||
List all the objects in the the path with size and path.`,
|
List all the objects in the the path with size and path.`,
|
||||||
Run: func(fdst, fsrc fs.Fs) error {
|
Run: func(fdst, fsrc fs.Fs) error {
|
||||||
|
@ -120,7 +120,7 @@ var Commands = []Command{
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
Name: "lsd",
|
Name: "lsd",
|
||||||
ArgsHelp: "[remote:path]",
|
ArgsHelp: "remote:path",
|
||||||
Help: `
|
Help: `
|
||||||
List all directories/containers/buckets in the the path.`,
|
List all directories/containers/buckets in the the path.`,
|
||||||
Run: func(fdst, fsrc fs.Fs) error {
|
Run: func(fdst, fsrc fs.Fs) error {
|
||||||
|
@ -131,7 +131,7 @@ var Commands = []Command{
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
Name: "lsl",
|
Name: "lsl",
|
||||||
ArgsHelp: "[remote:path]",
|
ArgsHelp: "remote:path",
|
||||||
Help: `
|
Help: `
|
||||||
List all the objects in the the path with modification time,
|
List all the objects in the the path with modification time,
|
||||||
size and path.`,
|
size and path.`,
|
||||||
|
@ -143,7 +143,7 @@ var Commands = []Command{
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
Name: "md5sum",
|
Name: "md5sum",
|
||||||
ArgsHelp: "[remote:path]",
|
ArgsHelp: "remote:path",
|
||||||
Help: `
|
Help: `
|
||||||
Produces an md5sum file for all the objects in the path. This
|
Produces an md5sum file for all the objects in the path. This
|
||||||
is in the same format as the standard md5sum tool produces.`,
|
is in the same format as the standard md5sum tool produces.`,
|
||||||
|
@ -153,6 +153,24 @@ var Commands = []Command{
|
||||||
MinArgs: 1,
|
MinArgs: 1,
|
||||||
MaxArgs: 1,
|
MaxArgs: 1,
|
||||||
},
|
},
|
||||||
|
{
|
||||||
|
Name: "size",
|
||||||
|
ArgsHelp: "remote:path",
|
||||||
|
Help: `
|
||||||
|
Returns the total size of objects in remote:path and the number
|
||||||
|
of objects.`,
|
||||||
|
Run: func(fdst, fsrc fs.Fs) error {
|
||||||
|
objects, size, err := fs.Count(fdst)
|
||||||
|
if err != nil {
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
fmt.Printf("Total objects: %d\n", objects)
|
||||||
|
fmt.Printf("Total size: %v (%d bytes)\n", fs.SizeSuffix(size), size)
|
||||||
|
return nil
|
||||||
|
},
|
||||||
|
MinArgs: 1,
|
||||||
|
MaxArgs: 1,
|
||||||
|
},
|
||||||
{
|
{
|
||||||
Name: "mkdir",
|
Name: "mkdir",
|
||||||
ArgsHelp: "remote:path",
|
ArgsHelp: "remote:path",
|
||||||
|
|
Loading…
Reference in a new issue