copyurl: add option to print resulting auto-filename (#5095)
Fixes #5094
This commit is contained in:
parent
97fc3b9046
commit
ce182adf46
2 changed files with 18 additions and 9 deletions
|
@ -3,6 +3,7 @@ package copyurl
|
||||||
import (
|
import (
|
||||||
"context"
|
"context"
|
||||||
"errors"
|
"errors"
|
||||||
|
"fmt"
|
||||||
"os"
|
"os"
|
||||||
|
|
||||||
"github.com/rclone/rclone/cmd"
|
"github.com/rclone/rclone/cmd"
|
||||||
|
@ -14,6 +15,7 @@ import (
|
||||||
|
|
||||||
var (
|
var (
|
||||||
autoFilename = false
|
autoFilename = false
|
||||||
|
printFilename = false
|
||||||
stdout = false
|
stdout = false
|
||||||
noClobber = false
|
noClobber = false
|
||||||
)
|
)
|
||||||
|
@ -22,6 +24,7 @@ func init() {
|
||||||
cmd.Root.AddCommand(commandDefinition)
|
cmd.Root.AddCommand(commandDefinition)
|
||||||
cmdFlags := commandDefinition.Flags()
|
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, &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, &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")
|
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
|
Download a URL's content and copy it to the destination without saving
|
||||||
it in temporary storage.
|
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
|
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.
|
destination if there is one with the same name.
|
||||||
|
|
||||||
Setting --stdout or making the output file name "-" will cause the
|
Setting ` + "`--stdout`" + ` or making the output file name ` + "`-`" + `
|
||||||
output to be written to standard output.
|
will cause the output to be written to standard output.
|
||||||
`,
|
`,
|
||||||
RunE: func(command *cobra.Command, args []string) (err error) {
|
RunE: func(command *cobra.Command, args []string) (err error) {
|
||||||
cmd.CheckArgs(1, 2, command, args)
|
cmd.CheckArgs(1, 2, command, args)
|
||||||
|
@ -61,10 +65,14 @@ output to be written to standard output.
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
cmd.Run(true, true, command, func() error {
|
cmd.Run(true, true, command, func() error {
|
||||||
|
var dst fs.Object
|
||||||
if stdout {
|
if stdout {
|
||||||
err = operations.CopyURLToWriter(context.Background(), args[0], os.Stdout)
|
err = operations.CopyURLToWriter(context.Background(), args[0], os.Stdout)
|
||||||
} else {
|
} 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
|
return err
|
||||||
})
|
})
|
||||||
|
|
|
@ -1635,6 +1635,7 @@ func copyURLFn(ctx context.Context, dstFileName string, url string, dstFileNameF
|
||||||
if dstFileName == "." || dstFileName == "/" {
|
if dstFileName == "." || dstFileName == "/" {
|
||||||
return errors.Errorf("CopyURL failed: file name wasn't found in url")
|
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)
|
return fn(ctx, dstFileName, resp.Body, resp.ContentLength, modTime)
|
||||||
}
|
}
|
||||||
|
|
Loading…
Add table
Reference in a new issue