From ce182adf464e8dc99c20ad382ad52f80acebb799 Mon Sep 17 00:00:00 2001 From: albertony <12441419+albertony@users.noreply.github.com> Date: Thu, 18 Mar 2021 10:04:59 +0100 Subject: [PATCH] copyurl: add option to print resulting auto-filename (#5095) Fixes #5094 --- cmd/copyurl/copyurl.go | 26 +++++++++++++++++--------- fs/operations/operations.go | 1 + 2 files changed, 18 insertions(+), 9 deletions(-) diff --git a/cmd/copyurl/copyurl.go b/cmd/copyurl/copyurl.go index 50e590117..f15f50b03 100644 --- a/cmd/copyurl/copyurl.go +++ b/cmd/copyurl/copyurl.go @@ -3,6 +3,7 @@ package copyurl import ( "context" "errors" + "fmt" "os" "github.com/rclone/rclone/cmd" @@ -13,15 +14,17 @@ import ( ) var ( - autoFilename = false - stdout = false - noClobber = false + autoFilename = false + printFilename = false + stdout = false + noClobber = false ) func init() { cmd.Root.AddCommand(commandDefinition) cmdFlags := commandDefinition.Flags() flags.BoolVarP(cmdFlags, &autoFilename, "auto-filename", "a", autoFilename, "Get the file name from the URL and use it for destination file path") + flags.BoolVarP(cmdFlags, &printFilename, "print-filename", "p", printFilename, "Print the resulting name from --auto-filename") flags.BoolVarP(cmdFlags, &noClobber, "no-clobber", "", noClobber, "Prevent overwriting file with same name") flags.BoolVarP(cmdFlags, &stdout, "stdout", "", stdout, "Write the output to stdout rather than a file") } @@ -33,15 +36,16 @@ var commandDefinition = &cobra.Command{ Download a URL's content and copy it to the destination without saving it in temporary storage. -Setting --auto-filename will cause the file name to be retrieved from +Setting ` + "`--auto-filename`" + `will cause the file name to be retrieved from the from URL (after any redirections) and used in the destination -path. +path. With ` + "`--print-filename`" + ` in addition, the resuling file name will +be printed. -Setting --no-clobber will prevent overwriting file on the +Setting ` + "`--no-clobber`" + ` will prevent overwriting file on the destination if there is one with the same name. -Setting --stdout or making the output file name "-" will cause the -output to be written to standard output. +Setting ` + "`--stdout`" + ` or making the output file name ` + "`-`" + ` +will cause the output to be written to standard output. `, RunE: func(command *cobra.Command, args []string) (err error) { cmd.CheckArgs(1, 2, command, args) @@ -61,10 +65,14 @@ output to be written to standard output. } } cmd.Run(true, true, command, func() error { + var dst fs.Object if stdout { err = operations.CopyURLToWriter(context.Background(), args[0], os.Stdout) } else { - _, err = operations.CopyURL(context.Background(), fsdst, dstFileName, args[0], autoFilename, noClobber) + dst, err = operations.CopyURL(context.Background(), fsdst, dstFileName, args[0], autoFilename, noClobber) + if printFilename && err == nil && dst != nil { + fmt.Println(dst.Remote()) + } } return err }) diff --git a/fs/operations/operations.go b/fs/operations/operations.go index 822c4286e..0547ab9ab 100644 --- a/fs/operations/operations.go +++ b/fs/operations/operations.go @@ -1635,6 +1635,7 @@ func copyURLFn(ctx context.Context, dstFileName string, url string, dstFileNameF if dstFileName == "." || dstFileName == "/" { return errors.Errorf("CopyURL failed: file name wasn't found in url") } + fs.Debugf(dstFileName, "File name found in url") } return fn(ctx, dstFileName, resp.Body, resp.ContentLength, modTime) }