Move a Drive file to a different folder, give it a different name, or both.
Arguments
- file
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 adribble
.- path
Specifies target destination for the file on Google Drive. Can be an actual path (character), a file id marked with
as_id()
, or adribble
.If
path
is a shortcut to a folder, it is automatically resolved to its target folder.If
path
is given as a path (as opposed to adribble
or an id), 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. By default, the file stays in its current folder.- name
Character, new file name if not specified as part of
path
. This will forcepath
to be interpreted as a folder, even if it is character and lacks a trailing slash. By default, the file keeps its current name.- overwrite
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.
- verbose
This logical argument to individual googledrive functions is deprecated. To globally suppress googledrive messaging, use
options(googledrive_quiet = TRUE)
(the default behaviour is to emit informational messages). To suppress messaging in a more limited way, use the helperslocal_drive_quiet()
orwith_drive_quiet()
.
Value
An object of class dribble
, a tibble with one row per file.
Examples
# create a file to move
file <- drive_example_remote("chicken.txt") %>%
drive_cp("chicken-mv.txt")
#> Original file:
#> • chicken.txt <id: 1wOLeWVRkTb6lDmLRiOhg9iKM7DlN762Y>
#> Copied to file:
#> • chicken-mv.txt <id: 1_sKTk6rXNrzjGr3bxNk6BfjrVHtdu8Lr>
# rename it, but leave in current folder (root folder, in this case)
file <- drive_mv(file, "chicken-mv-renamed.txt")
#> Original file:
#> • chicken-mv.txt <id: 1_sKTk6rXNrzjGr3bxNk6BfjrVHtdu8Lr>
#> Has been renamed:
#> • chicken-mv-renamed.txt <id: 1_sKTk6rXNrzjGr3bxNk6BfjrVHtdu8Lr>
# create a folder to move the file into
folder <- drive_mkdir("mv-folder")
#> Created Drive file:
#> • mv-folder <id: 1SlAEXftUDdEVKnltKW0gXETVmUirTAnA>
#> With MIME type:
#> • application/vnd.google-apps.folder
# move the file and rename it again,
# specify destination as a dribble
file <- drive_mv(file, path = folder, name = "chicken-mv-re-renamed.txt")
#> Original file:
#> • chicken-mv-renamed.txt <id: 1_sKTk6rXNrzjGr3bxNk6BfjrVHtdu8Lr>
#> Has been renamed and moved:
#> • mv-folder/chicken-mv-re-renamed.txt
#> <id: 1_sKTk6rXNrzjGr3bxNk6BfjrVHtdu8Lr>
# verify renamed file is now in the folder
drive_ls(folder)
#> # A dribble: 1 × 3
#> name id drive_resource
#> <chr> <drv_id> <list>
#> 1 chicken-mv-re-renamed.txt 1_sKTk6… <named list [42]>
# move the file back to root folder
file <- drive_mv(file, "~/")
#> Original file:
#> • chicken-mv-re-renamed.txt <id: 1_sKTk6rXNrzjGr3bxNk6BfjrVHtdu8Lr>
#> Has been moved:
#> • ~/chicken-mv-re-renamed.txt <id: 1_sKTk6rXNrzjGr3bxNk6BfjrVHtdu8Lr>
# move it again
# specify destination as path with trailing slash
# to ensure we get a move vs. renaming it to "mv-folder"
file <- drive_mv(file, "mv-folder/")
#> Original file:
#> • chicken-mv-re-renamed.txt <id: 1_sKTk6rXNrzjGr3bxNk6BfjrVHtdu8Lr>
#> Has been moved:
#> • mv-folder/chicken-mv-re-renamed.txt
#> <id: 1_sKTk6rXNrzjGr3bxNk6BfjrVHtdu8Lr>
# `overwrite = FALSE` errors if something already exists at target filepath
# THIS WILL ERROR!
drive_create("name-squatter-mv", path = "~/")
#> Created Drive file:
#> • name-squatter-mv <id: 1g5GU11l_To47XfVsCrG5myp__NF3NS1F>
#> With MIME type:
#> • application/octet-stream
drive_mv(file, path = "~/", name = "name-squatter-mv", overwrite = FALSE)
#> Error in check_for_overwrite(parent = params[["addParents"]] %||% parent_before, name = params[["name"]] %||% file$name, overwrite = overwrite): 1 item already exists at the target filepath and `overwrite =
#> FALSE`:
#> • name-squatter-mv <id: 1g5GU11l_To47XfVsCrG5myp__NF3NS1F>
# `overwrite = TRUE` moves the existing item to trash, then proceeds
drive_mv(file, path = "~/", name = "name-squatter-mv", overwrite = TRUE)
#> File trashed:
#> • name-squatter-mv <id: 1g5GU11l_To47XfVsCrG5myp__NF3NS1F>
#> Original file:
#> • chicken-mv-re-renamed.txt <id: 1_sKTk6rXNrzjGr3bxNk6BfjrVHtdu8Lr>
#> Has been renamed and moved:
#> • ~/name-squatter-mv <id: 1_sKTk6rXNrzjGr3bxNk6BfjrVHtdu8Lr>
# Clean up
drive_rm(file, folder)
#> Files deleted:
#> • chicken-mv-re-renamed.txt <id: 1_sKTk6rXNrzjGr3bxNk6BfjrVHtdu8Lr>
#> • mv-folder <id: 1SlAEXftUDdEVKnltKW0gXETVmUirTAnA>