mirror of
https://github.com/rclone/rclone
synced 2025-02-27 22:33:05 +01:00
copyurl: add option to print resulting auto-filename (#5095)
Fixes #5094
This commit is contained in:
parent
97fc3b9046
commit
ce182adf46
@ -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"
|
||||||
@ -13,15 +14,17 @@ import (
|
|||||||
)
|
)
|
||||||
|
|
||||||
var (
|
var (
|
||||||
autoFilename = false
|
autoFilename = false
|
||||||
stdout = false
|
printFilename = false
|
||||||
noClobber = false
|
stdout = false
|
||||||
|
noClobber = false
|
||||||
)
|
)
|
||||||
|
|
||||||
func init() {
|
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…
x
Reference in New Issue
Block a user