Copy a Drive file

Copies an existing Drive file into a new file id.

drive_cp(file, path = NULL, name = NULL, ..., overwrite = NA,
  verbose = TRUE)

Something that identifies the file of interest on your Google Drive. Can be a name or path, a file id or URL marked with as_id(), or a dribble.


Specifies target destination for the new file on Google Drive. Can be an actual path (character), a file id marked with as_id(), or a dribble. If specified as an actual path, it is best to explicitly indicate if it's a folder by including a trailing slash, since it cannot always be worked out from the context of the call. Defaults to "Copy of FILE-NAME".


Character, new file name if not specified as part of path. This will force path to be treated as a folder, even if it is character and lacks a trailing slash. Defaults to "Copy of FILE-NAME".


Named parameters to pass along to the Drive API. Has the tidy dots semantics that come from using rlang::list2(). You can affect the metadata of the target file by specifying properties of the Files resource via .... Read the "Request body" section of the Drive API docs for the associated endpoint to learn about relevant parameters.


Logical, indicating whether to check for a pre-existing file at the targetted "filepath". The quotes around "filepath" refer to the fact that Drive does not impose a 1-to-1 relationship between filepaths and files, like a typical file system; read more about that in drive_get().

  • NA (default): Just do the operation, even if it results in multiple files with the same filepath.

  • TRUE: Check for a pre-existing file at the filepath. If there is zero or one, move a pre-existing file to the trash, then carry on. Note that the new file does not inherit any properties from the old one, such as sharing or publishing settings. It will have a new file ID. An error is thrown if two or more pre-existing files are found.

  • FALSE: Error if there is any pre-existing file at the filepath.

Note that existence checks, based on filepath, are expensive operations, i.e. they require additional API calls.


Logical, indicating whether to print informative messages (default TRUE).


An object of class dribble, a tibble with one row per item.

See Also

Wraps the files.copy endpoint:

  • drive_cp
## Create a file to copy
file <- drive_upload(drive_example("chicken.txt"), "chicken-cp.txt")

## Make a "Copy of" copy in same folder as the original

## Make an explicitly named copy in same folder as the original
drive_cp("chicken-cp.txt", "chicken-cp-two.txt")

## Make an explicitly named copy in a different folder
folder <- drive_mkdir("new-folder")
drive_cp("chicken-cp.txt", path = folder, name = "chicken-cp-three.txt")

## Make an explicitly named copy and star it.
## The starring is an example of providing metadata via `...`.
## `starred` is not an actual argument to `drive_cp()`,
## it just gets passed through to the API.
drive_cp("chicken-cp.txt", name = "chicken-cp-starred.txt", starred = TRUE)

## `overwrite = FALSE` errors if file already exists at target filepath
drive_cp("chicken-cp.txt", name = "chicken-cp.txt", overwrite = FALSE)

## `overwrite = TRUE` moves an existing file to trash, then proceeds
drive_cp("chicken-cp.txt", name = "chicken-cp.txt", overwrite = TRUE)

## Behold all of our copies!

## Delete all of our copies and the new folder!
drive_find("chicken-cp") %>% drive_rm()

## upload a csv file to copy
csv_file <- drive_upload(drive_example("chicken.csv"))

## copy AND AT THE SAME TIME convert it to a Google Sheet
chicken_sheet <- drive_cp(
  name = "chicken-cp",
  mime_type = drive_mime_type("spreadsheet")

## go see the new Sheet in the browser
## drive_browse(chicken_sheet)

## clean up
drive_rm(csv_file, chicken_sheet)
# }
Documentation reproduced from package googledrive, version 1.0.0, License: MIT + file LICENSE

Community examples

Looks like there are no examples yet.