Skip to content

drive_reveal() adds extra information about your Drive files that is not readily available in the default dribble produced by googledrive. Why is this info not always included in the default dribble?

  • You don't always care about it. There is a lot of esoteric information in the drive_resource that has little value for most users.

  • It might be "expensive" to get this information and put it into a usable form. For example, revealing a file's "path", "permissions", or "published" status all require additional API calls.

drive_reveal() can also hoist any property out of the drive_resource list-column, when the property's name is passed as the what argument. The resulting new column is simplified if it is easy to do so, e.g., if the individual elements are all string or logical. If what extracts a date-time, we return POSIXct. Otherwise, you'll get a list-column. If this makes you sad, consider using tidyr::hoist() instead. It is more powerful due to a richer "plucking specification" and its ptype and transform arguments. Another useful function is tidyr::unnest_wider().

Usage

drive_reveal(file, what = c("path", "permissions", "published", "parent"))

Arguments

file

Something that identifies the file(s) of interest on your Google Drive. Can be a character vector of names/paths, a character vector of file ids or URLs marked with as_id(), or a dribble.

what

Character, describing the type of info you want to add. These values get special handling (more details below):

  • path

  • permissions

  • published

  • parent

You can also request any property in the drive_resource column by name. The request can be in camelCase or snake_case, but the new column name will always be snake_case. Some examples of what:

  • mime_type (or mimeType)

  • trashed

  • starred

  • description

  • version

  • web_view_link (or webViewLink)

  • modified_time (or modifiedTime)

  • created_time (or createdTime)

  • owned_by_me (or ownedByMe)

  • size

  • quota_bytes_used (or quotaBytesUsed)

Value

An object of class dribble, a tibble with one row per file. The additional info requested via whatappears in one (or more) extra columns.

File path

When what = "path" the dribble gains a character column holding each file's path. This can be very slow, so use with caution.

The example path ~/a/b/ illustrates two conventions used in googledrive:

  • The leading ~/ means that the folder a is located in the current user's "My Drive" root folder.

  • The trailing / means that b, located in a, is a folder or a folder shortcut.

Permissions

When what = "permissions" the dribble gains a logical column shared that indicates whether a file is shared and a new list-column permissions_resource containing lists of Permissions resources.

Publishing

When what = "published" the dribble gains a logical column published that indicates whether a file is published and a new list-column revision_resource containing lists of Revisions resources.

Parent

When what = "parent" the dribble gains a character column id_parent that is the file id of this item's parent folder. This information is available in the drive_resource, but can't just be hoisted out:

  • Google Drive used to allow files to have multiple parents, but this is no longer supported and googledrive now assumes this is impossible. However, we have seen (very old) files that still have >1 parent folder. If we see this we message about it and drop all but the first parent.

  • The parents property in drive_resource has an "extra" layer of nesting and needs to be flattened.

If you really want the raw parents property, call drive_reveal(what = "parents").

See also

To learn more about the properties present in the metadata of a Drive file (which is what's in the drive_resource list-column of a dribble), see the API docs:

Examples

# Get a few of your files
files <- drive_find(n_max = 10, trashed = NA)

# the "special" cases that require additional API calls and can be slow
drive_reveal(files, "path")
#> # A dribble: 10 × 4
#>    name                 path                   id           drive_resource
#>    <chr>                <chr>                  <drv_id>     <list>        
#>  1 name-squatter        ~/name-squatter        1-_5PDgzasA… <named list>  
#>  2 name-squatter        ~/name-squatter        1dFvJgKgzUN… <named list>  
#>  3 name-squatter-upload ~/name-squatter-upload 1M4oChRy-At… <named list>  
#>  4 name-squatter-rename ~/name-squatter-rename 1lTdRtQkBAo… <named list>  
#>  5 name-squatter-mv     ~/name-squatter-mv     13FlFYR1XVH… <named list>  
#>  6 name-squatter-upload ~/name-squatter-upload 1IvdfcQYjy9… <named list>  
#>  7 name-squatter-rename ~/name-squatter-rename 1CNKHlM84Xt… <named list>  
#>  8 name-squatter-mv     ~/name-squatter-mv     1uSg8aTc3ZL… <named list>  
#>  9 name-squatter-upload ~/name-squatter-upload 1uEsx5dENLF… <named list>  
#> 10 name-squatter-rename ~/name-squatter-rename 1FlZtCAUMzk… <named list>  
drive_reveal(files, "permissions")
#> # A dribble: 10 × 5
#>    name                 shared id          drive_resource permissions_res…
#>    <chr>                <lgl>  <drv_id>    <list>         <list>          
#>  1 name-squatter        FALSE  1-_5PDgzas… <named list>   <named list [2]>
#>  2 name-squatter        FALSE  1dFvJgKgzU… <named list>   <named list [2]>
#>  3 name-squatter-upload FALSE  1M4oChRy-A… <named list>   <named list [2]>
#>  4 name-squatter-rename FALSE  1lTdRtQkBA… <named list>   <named list [2]>
#>  5 name-squatter-mv     FALSE  13FlFYR1XV… <named list>   <named list [2]>
#>  6 name-squatter-upload FALSE  1IvdfcQYjy… <named list>   <named list [2]>
#>  7 name-squatter-rename FALSE  1CNKHlM84X… <named list>   <named list [2]>
#>  8 name-squatter-mv     FALSE  1uSg8aTc3Z… <named list>   <named list [2]>
#>  9 name-squatter-upload FALSE  1uEsx5dENL… <named list>   <named list [2]>
#> 10 name-squatter-rename FALSE  1FlZtCAUMz… <named list>   <named list [2]>
drive_reveal(files, "published")
#> # A dribble: 10 × 5
#>    name                 published id       drive_resource revision_resour…
#>    <chr>                <lgl>     <drv_id> <list>         <list>          
#>  1 name-squatter        FALSE     1-_5PDg… <named list>   <named list [9]>
#>  2 name-squatter        FALSE     1dFvJgK… <named list>   <named list [9]>
#>  3 name-squatter-upload FALSE     1M4oChR… <named list>   <named list [9]>
#>  4 name-squatter-rename FALSE     1lTdRtQ… <named list>   <named list [9]>
#>  5 name-squatter-mv     FALSE     13FlFYR… <named list>   <named list [9]>
#>  6 name-squatter-upload FALSE     1IvdfcQ… <named list>   <named list [9]>
#>  7 name-squatter-rename FALSE     1CNKHlM… <named list>   <named list [9]>
#>  8 name-squatter-mv     FALSE     1uSg8aT… <named list>   <named list [9]>
#>  9 name-squatter-upload FALSE     1uEsx5d… <named list>   <named list [9]>
#> 10 name-squatter-rename FALSE     1FlZtCA… <named list>   <named list [9]>

# a "special" case of digging info out of `drive_resource`, then processing
# a bit
drive_reveal(files, "parent")
#> # A dribble: 10 × 4
#>    name                 id_parent           id              drive_resource
#>    <chr>                <drv_id>            <drv_id>        <list>        
#>  1 name-squatter        0AO_RMaBzcP63Uk9PVA 1-_5PDgzasAnym… <named list>  
#>  2 name-squatter        0AO_RMaBzcP63Uk9PVA 1dFvJgKgzUN-Dm… <named list>  
#>  3 name-squatter-upload 0AO_RMaBzcP63Uk9PVA 1M4oChRy-AtnKm… <named list>  
#>  4 name-squatter-rename 0AO_RMaBzcP63Uk9PVA 1lTdRtQkBAowb_… <named list>  
#>  5 name-squatter-mv     0AO_RMaBzcP63Uk9PVA 13FlFYR1XVHqXX… <named list>  
#>  6 name-squatter-upload 0AO_RMaBzcP63Uk9PVA 1IvdfcQYjy9rG8… <named list>  
#>  7 name-squatter-rename 0AO_RMaBzcP63Uk9PVA 1CNKHlM84Xtqwu… <named list>  
#>  8 name-squatter-mv     0AO_RMaBzcP63Uk9PVA 1uSg8aTc3ZLgtv… <named list>  
#>  9 name-squatter-upload 0AO_RMaBzcP63Uk9PVA 1uEsx5dENLFGEk… <named list>  
#> 10 name-squatter-rename 0AO_RMaBzcP63Uk9PVA 1FlZtCAUMzkP6Y… <named list>  

# the "simple" cases of digging info out of `drive_resource`
drive_reveal(files, "trashed")
#> # A dribble: 10 × 4
#>    name                 trashed id                          drive_resource
#>    <chr>                <lgl>   <drv_id>                    <list>        
#>  1 name-squatter        TRUE    1-_5PDgzasAnymjMKa8YjFGGdh… <named list>  
#>  2 name-squatter        TRUE    1dFvJgKgzUN-DmPW8py8_0fmfX… <named list>  
#>  3 name-squatter-upload TRUE    1M4oChRy-AtnKmWjbtxODfU0p0… <named list>  
#>  4 name-squatter-rename TRUE    1lTdRtQkBAowb_hGwdWP5oq7nA… <named list>  
#>  5 name-squatter-mv     TRUE    13FlFYR1XVHqXXuTqadeeZeKvV… <named list>  
#>  6 name-squatter-upload TRUE    1IvdfcQYjy9rG8oPegbuP2Q9Jt… <named list>  
#>  7 name-squatter-rename TRUE    1CNKHlM84Xtqwu7yquED7vWW8q… <named list>  
#>  8 name-squatter-mv     TRUE    1uSg8aTc3ZLgtv_PC7D8kbusgc… <named list>  
#>  9 name-squatter-upload TRUE    1uEsx5dENLFGEkJvGm3qpvmjUC… <named list>  
#> 10 name-squatter-rename TRUE    1FlZtCAUMzkP6Yr61Rlu3qzT-x… <named list>  
drive_reveal(files, "mime_type")
#> # A dribble: 10 × 4
#>    name                 mime_type                id         drive_resource
#>    <chr>                <chr>                    <drv_id>   <list>        
#>  1 name-squatter        application/octet-stream 1-_5PDgza… <named list>  
#>  2 name-squatter        application/octet-stream 1dFvJgKgz… <named list>  
#>  3 name-squatter-upload application/octet-stream 1M4oChRy-… <named list>  
#>  4 name-squatter-rename application/octet-stream 1lTdRtQkB… <named list>  
#>  5 name-squatter-mv     application/octet-stream 13FlFYR1X… <named list>  
#>  6 name-squatter-upload application/octet-stream 1IvdfcQYj… <named list>  
#>  7 name-squatter-rename application/octet-stream 1CNKHlM84… <named list>  
#>  8 name-squatter-mv     application/octet-stream 1uSg8aTc3… <named list>  
#>  9 name-squatter-upload application/octet-stream 1uEsx5dEN… <named list>  
#> 10 name-squatter-rename application/octet-stream 1FlZtCAUM… <named list>  
drive_reveal(files, "starred")
#> # A dribble: 10 × 4
#>    name                 starred id                          drive_resource
#>    <chr>                <lgl>   <drv_id>                    <list>        
#>  1 name-squatter        FALSE   1-_5PDgzasAnymjMKa8YjFGGdh… <named list>  
#>  2 name-squatter        FALSE   1dFvJgKgzUN-DmPW8py8_0fmfX… <named list>  
#>  3 name-squatter-upload FALSE   1M4oChRy-AtnKmWjbtxODfU0p0… <named list>  
#>  4 name-squatter-rename FALSE   1lTdRtQkBAowb_hGwdWP5oq7nA… <named list>  
#>  5 name-squatter-mv     FALSE   13FlFYR1XVHqXXuTqadeeZeKvV… <named list>  
#>  6 name-squatter-upload FALSE   1IvdfcQYjy9rG8oPegbuP2Q9Jt… <named list>  
#>  7 name-squatter-rename FALSE   1CNKHlM84Xtqwu7yquED7vWW8q… <named list>  
#>  8 name-squatter-mv     FALSE   1uSg8aTc3ZLgtv_PC7D8kbusgc… <named list>  
#>  9 name-squatter-upload FALSE   1uEsx5dENLFGEkJvGm3qpvmjUC… <named list>  
#> 10 name-squatter-rename FALSE   1FlZtCAUMzkP6Yr61Rlu3qzT-x… <named list>  
drive_reveal(files, "description")
#> # A dribble: 10 × 4
#>    name                 description id                      drive_resource
#>    <chr>                <list>      <drv_id>                <list>        
#>  1 name-squatter        <NULL>      1-_5PDgzasAnymjMKa8YjF… <named list>  
#>  2 name-squatter        <NULL>      1dFvJgKgzUN-DmPW8py8_0… <named list>  
#>  3 name-squatter-upload <NULL>      1M4oChRy-AtnKmWjbtxODf… <named list>  
#>  4 name-squatter-rename <NULL>      1lTdRtQkBAowb_hGwdWP5o… <named list>  
#>  5 name-squatter-mv     <NULL>      13FlFYR1XVHqXXuTqadeeZ… <named list>  
#>  6 name-squatter-upload <NULL>      1IvdfcQYjy9rG8oPegbuP2… <named list>  
#>  7 name-squatter-rename <NULL>      1CNKHlM84Xtqwu7yquED7v… <named list>  
#>  8 name-squatter-mv     <NULL>      1uSg8aTc3ZLgtv_PC7D8kb… <named list>  
#>  9 name-squatter-upload <NULL>      1uEsx5dENLFGEkJvGm3qpv… <named list>  
#> 10 name-squatter-rename <NULL>      1FlZtCAUMzkP6Yr61Rlu3q… <named list>  
drive_reveal(files, "version")
#> # A dribble: 10 × 4
#>    name                 version id                          drive_resource
#>    <chr>                <chr>   <drv_id>                    <list>        
#>  1 name-squatter        2       1-_5PDgzasAnymjMKa8YjFGGdh… <named list>  
#>  2 name-squatter        2       1dFvJgKgzUN-DmPW8py8_0fmfX… <named list>  
#>  3 name-squatter-upload 2       1M4oChRy-AtnKmWjbtxODfU0p0… <named list>  
#>  4 name-squatter-rename 2       1lTdRtQkBAowb_hGwdWP5oq7nA… <named list>  
#>  5 name-squatter-mv     2       13FlFYR1XVHqXXuTqadeeZeKvV… <named list>  
#>  6 name-squatter-upload 2       1IvdfcQYjy9rG8oPegbuP2Q9Jt… <named list>  
#>  7 name-squatter-rename 2       1CNKHlM84Xtqwu7yquED7vWW8q… <named list>  
#>  8 name-squatter-mv     2       1uSg8aTc3ZLgtv_PC7D8kbusgc… <named list>  
#>  9 name-squatter-upload 2       1uEsx5dENLFGEkJvGm3qpvmjUC… <named list>  
#> 10 name-squatter-rename 2       1FlZtCAUMzkP6Yr61Rlu3qzT-x… <named list>  
drive_reveal(files, "web_view_link")
#> # A dribble: 10 × 4
#>    name                 web_view_link                 id    drive_resource
#>    <chr>                <chr>                         <drv> <list>        
#>  1 name-squatter        https://drive.google.com/fil… 1-_5… <named list>  
#>  2 name-squatter        https://drive.google.com/fil… 1dFv… <named list>  
#>  3 name-squatter-upload https://drive.google.com/fil… 1M4o… <named list>  
#>  4 name-squatter-rename https://drive.google.com/fil… 1lTd… <named list>  
#>  5 name-squatter-mv     https://drive.google.com/fil… 13Fl… <named list>  
#>  6 name-squatter-upload https://drive.google.com/fil… 1Ivd… <named list>  
#>  7 name-squatter-rename https://drive.google.com/fil… 1CNK… <named list>  
#>  8 name-squatter-mv     https://drive.google.com/fil… 1uSg… <named list>  
#>  9 name-squatter-upload https://drive.google.com/fil… 1uEs… <named list>  
#> 10 name-squatter-rename https://drive.google.com/fil… 1FlZ… <named list>  
drive_reveal(files, "modified_time")
#> # A dribble: 10 × 4
#>    name                 modified_time       id              drive_resource
#>    <chr>                <dttm>              <drv_id>        <list>        
#>  1 name-squatter        2022-02-28 17:13:21 1-_5PDgzasAnym… <named list>  
#>  2 name-squatter        2022-02-28 17:13:05 1dFvJgKgzUN-Dm… <named list>  
#>  3 name-squatter-upload 2022-02-28 16:45:10 1M4oChRy-AtnKm… <named list>  
#>  4 name-squatter-rename 2022-02-28 16:44:33 1lTdRtQkBAowb_… <named list>  
#>  5 name-squatter-mv     2022-02-28 16:44:16 13FlFYR1XVHqXX… <named list>  
#>  6 name-squatter-upload 2022-02-28 16:26:47 1IvdfcQYjy9rG8… <named list>  
#>  7 name-squatter-rename 2022-02-28 16:26:04 1CNKHlM84Xtqwu… <named list>  
#>  8 name-squatter-mv     2022-02-28 16:25:41 1uSg8aTc3ZLgtv… <named list>  
#>  9 name-squatter-upload 2022-02-28 13:43:47 1uEsx5dENLFGEk… <named list>  
#> 10 name-squatter-rename 2022-02-28 13:43:14 1FlZtCAUMzkP6Y… <named list>  
drive_reveal(files, "created_time")
#> # A dribble: 10 × 4
#>    name                 created_time        id              drive_resource
#>    <chr>                <dttm>              <drv_id>        <list>        
#>  1 name-squatter        2022-02-28 17:13:21 1-_5PDgzasAnym… <named list>  
#>  2 name-squatter        2022-02-28 17:13:05 1dFvJgKgzUN-Dm… <named list>  
#>  3 name-squatter-upload 2022-02-28 16:45:10 1M4oChRy-AtnKm… <named list>  
#>  4 name-squatter-rename 2022-02-28 16:44:33 1lTdRtQkBAowb_… <named list>  
#>  5 name-squatter-mv     2022-02-28 16:44:16 13FlFYR1XVHqXX… <named list>  
#>  6 name-squatter-upload 2022-02-28 16:26:47 1IvdfcQYjy9rG8… <named list>  
#>  7 name-squatter-rename 2022-02-28 16:26:04 1CNKHlM84Xtqwu… <named list>  
#>  8 name-squatter-mv     2022-02-28 16:25:41 1uSg8aTc3ZLgtv… <named list>  
#>  9 name-squatter-upload 2022-02-28 13:43:47 1uEsx5dENLFGEk… <named list>  
#> 10 name-squatter-rename 2022-02-28 13:43:14 1FlZtCAUMzkP6Y… <named list>  
drive_reveal(files, "owned_by_me")
#> # A dribble: 10 × 4
#>    name                 owned_by_me id                      drive_resource
#>    <chr>                <lgl>       <drv_id>                <list>        
#>  1 name-squatter        TRUE        1-_5PDgzasAnymjMKa8YjF… <named list>  
#>  2 name-squatter        TRUE        1dFvJgKgzUN-DmPW8py8_0… <named list>  
#>  3 name-squatter-upload TRUE        1M4oChRy-AtnKmWjbtxODf… <named list>  
#>  4 name-squatter-rename TRUE        1lTdRtQkBAowb_hGwdWP5o… <named list>  
#>  5 name-squatter-mv     TRUE        13FlFYR1XVHqXXuTqadeeZ… <named list>  
#>  6 name-squatter-upload TRUE        1IvdfcQYjy9rG8oPegbuP2… <named list>  
#>  7 name-squatter-rename TRUE        1CNKHlM84Xtqwu7yquED7v… <named list>  
#>  8 name-squatter-mv     TRUE        1uSg8aTc3ZLgtv_PC7D8kb… <named list>  
#>  9 name-squatter-upload TRUE        1uEsx5dENLFGEkJvGm3qpv… <named list>  
#> 10 name-squatter-rename TRUE        1FlZtCAUMzkP6Yr61Rlu3q… <named list>  
drive_reveal(files, "size")
#> # A dribble: 10 × 4
#>    name                 size  id                            drive_resource
#>    <chr>                <chr> <drv_id>                      <list>        
#>  1 name-squatter        0     1-_5PDgzasAnymjMKa8YjFGGdhq-… <named list>  
#>  2 name-squatter        0     1dFvJgKgzUN-DmPW8py8_0fmfXuv… <named list>  
#>  3 name-squatter-upload 0     1M4oChRy-AtnKmWjbtxODfU0p00g… <named list>  
#>  4 name-squatter-rename 0     1lTdRtQkBAowb_hGwdWP5oq7nAxM… <named list>  
#>  5 name-squatter-mv     0     13FlFYR1XVHqXXuTqadeeZeKvV_e… <named list>  
#>  6 name-squatter-upload 0     1IvdfcQYjy9rG8oPegbuP2Q9JtrW… <named list>  
#>  7 name-squatter-rename 0     1CNKHlM84Xtqwu7yquED7vWW8qR1… <named list>  
#>  8 name-squatter-mv     0     1uSg8aTc3ZLgtv_PC7D8kbusgcnp… <named list>  
#>  9 name-squatter-upload 0     1uEsx5dENLFGEkJvGm3qpvmjUCIJ… <named list>  
#> 10 name-squatter-rename 0     1FlZtCAUMzkP6Yr61Rlu3qzT-xIN… <named list>  
drive_reveal(files, "quota_bytes_used")
#> # A dribble: 10 × 4
#>    name                 quota_bytes_used id                 drive_resource
#>    <chr>                <chr>            <drv_id>           <list>        
#>  1 name-squatter        0                1-_5PDgzasAnymjMK… <named list>  
#>  2 name-squatter        0                1dFvJgKgzUN-DmPW8… <named list>  
#>  3 name-squatter-upload 0                1M4oChRy-AtnKmWjb… <named list>  
#>  4 name-squatter-rename 0                1lTdRtQkBAowb_hGw… <named list>  
#>  5 name-squatter-mv     0                13FlFYR1XVHqXXuTq… <named list>  
#>  6 name-squatter-upload 0                1IvdfcQYjy9rG8oPe… <named list>  
#>  7 name-squatter-rename 0                1CNKHlM84Xtqwu7yq… <named list>  
#>  8 name-squatter-mv     0                1uSg8aTc3ZLgtv_PC… <named list>  
#>  9 name-squatter-upload 0                1uEsx5dENLFGEkJvG… <named list>  
#> 10 name-squatter-rename 0                1FlZtCAUMzkP6Yr61… <named list>  

# 'root' is a special file id that represents your My Drive root folder
drive_get(id = "root") %>%
  drive_reveal("path")
#> # A dribble: 1 × 4
#>   name     path  id                  drive_resource   
#>   <chr>    <chr> <drv_id>            <list>           
#> 1 My Drive ~/    0AO_RMaBzcP63Uk9PVA <named list [31]>