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 what appears 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-rename ~/name-squatter-rename 1AKZ-gI… <named list>  
#>  2 name-squatter-mv     ~/name-squatter-mv     1XhjY-o… <named list>  
#>  3 name-squatter-upload ~/name-squatter-upload 1jqPKMX… <named list>  
#>  4 name-squatter-rename ~/name-squatter-rename 11P8Lgm… <named list>  
#>  5 name-squatter-mv     ~/name-squatter-mv     1nsc4Iw… <named list>  
#>  6 name-squatter-upload ~/name-squatter-upload 1HIDfXi… <named list>  
#>  7 name-squatter-rename ~/name-squatter-rename 1QhQA9Z… <named list>  
#>  8 name-squatter-mv     ~/name-squatter-mv     11yrtJ5… <named list>  
#>  9 name-squatter-upload ~/name-squatter-upload 1QDyWHG… <named list>  
#> 10 name-squatter-rename ~/name-squatter-rename 1TfHbhi… <named list>  
drive_reveal(files, "permissions")
#> # A dribble: 10 × 5
#>    name             shared id       drive_resource permissions_resource
#>    <chr>            <lgl>  <drv_id> <list>         <list>              
#>  1 name-squatter-r… FALSE  1AKZ-gI… <named list>   <named list [2]>    
#>  2 name-squatter-mv FALSE  1XhjY-o… <named list>   <named list [2]>    
#>  3 name-squatter-u… FALSE  1jqPKMX… <named list>   <named list [2]>    
#>  4 name-squatter-r… FALSE  11P8Lgm… <named list>   <named list [2]>    
#>  5 name-squatter-mv FALSE  1nsc4Iw… <named list>   <named list [2]>    
#>  6 name-squatter-u… FALSE  1HIDfXi… <named list>   <named list [2]>    
#>  7 name-squatter-r… FALSE  1QhQA9Z… <named list>   <named list [2]>    
#>  8 name-squatter-mv FALSE  11yrtJ5… <named list>   <named list [2]>    
#>  9 name-squatter-u… FALSE  1QDyWHG… <named list>   <named list [2]>    
#> 10 name-squatter-r… FALSE  1TfHbhi… <named list>   <named list [2]>    
drive_reveal(files, "published")
#> # A dribble: 10 × 5
#>    name             published id       drive_resource revision_resource
#>    <chr>            <lgl>     <drv_id> <list>         <list>           
#>  1 name-squatter-r… FALSE     1AKZ-gI… <named list>   <named list [9]> 
#>  2 name-squatter-mv FALSE     1XhjY-o… <named list>   <named list [9]> 
#>  3 name-squatter-u… FALSE     1jqPKMX… <named list>   <named list [9]> 
#>  4 name-squatter-r… FALSE     11P8Lgm… <named list>   <named list [9]> 
#>  5 name-squatter-mv FALSE     1nsc4Iw… <named list>   <named list [9]> 
#>  6 name-squatter-u… FALSE     1HIDfXi… <named list>   <named list [9]> 
#>  7 name-squatter-r… FALSE     1QhQA9Z… <named list>   <named list [9]> 
#>  8 name-squatter-mv FALSE     11yrtJ5… <named list>   <named list [9]> 
#>  9 name-squatter-u… FALSE     1QDyWHG… <named list>   <named list [9]> 
#> 10 name-squatter-r… FALSE     1TfHbhi… <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-rename 0AO_RMaBzcP63Uk9PVA 1AKZ-gI… <named list [41]>
#>  2 name-squatter-mv     0AO_RMaBzcP63Uk9PVA 1XhjY-o… <named list [41]>
#>  3 name-squatter-upload 0AO_RMaBzcP63Uk9PVA 1jqPKMX… <named list [41]>
#>  4 name-squatter-rename 0AO_RMaBzcP63Uk9PVA 11P8Lgm… <named list [41]>
#>  5 name-squatter-mv     0AO_RMaBzcP63Uk9PVA 1nsc4Iw… <named list [41]>
#>  6 name-squatter-upload 0AO_RMaBzcP63Uk9PVA 1HIDfXi… <named list [41]>
#>  7 name-squatter-rename 0AO_RMaBzcP63Uk9PVA 1QhQA9Z… <named list [41]>
#>  8 name-squatter-mv     0AO_RMaBzcP63Uk9PVA 11yrtJ5… <named list [41]>
#>  9 name-squatter-upload 0AO_RMaBzcP63Uk9PVA 1QDyWHG… <named list [41]>
#> 10 name-squatter-rename 0AO_RMaBzcP63Uk9PVA 1TfHbhi… <named list [41]>

# 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-rename TRUE    1AKZ-gI… <named list [41]>
#>  2 name-squatter-mv     TRUE    1XhjY-o… <named list [41]>
#>  3 name-squatter-upload TRUE    1jqPKMX… <named list [41]>
#>  4 name-squatter-rename TRUE    11P8Lgm… <named list [41]>
#>  5 name-squatter-mv     TRUE    1nsc4Iw… <named list [41]>
#>  6 name-squatter-upload TRUE    1HIDfXi… <named list [41]>
#>  7 name-squatter-rename TRUE    1QhQA9Z… <named list [41]>
#>  8 name-squatter-mv     TRUE    11yrtJ5… <named list [41]>
#>  9 name-squatter-upload TRUE    1QDyWHG… <named list [41]>
#> 10 name-squatter-rename TRUE    1TfHbhi… <named list [41]>
drive_reveal(files, "mime_type")
#> # A dribble: 10 × 4
#>    name                 mime_type               id       drive_resource
#>    <chr>                <chr>                   <drv_id> <list>        
#>  1 name-squatter-rename application/octet-stre… 1AKZ-gI… <named list>  
#>  2 name-squatter-mv     application/octet-stre… 1XhjY-o… <named list>  
#>  3 name-squatter-upload application/octet-stre… 1jqPKMX… <named list>  
#>  4 name-squatter-rename application/octet-stre… 11P8Lgm… <named list>  
#>  5 name-squatter-mv     application/octet-stre… 1nsc4Iw… <named list>  
#>  6 name-squatter-upload application/octet-stre… 1HIDfXi… <named list>  
#>  7 name-squatter-rename application/octet-stre… 1QhQA9Z… <named list>  
#>  8 name-squatter-mv     application/octet-stre… 11yrtJ5… <named list>  
#>  9 name-squatter-upload application/octet-stre… 1QDyWHG… <named list>  
#> 10 name-squatter-rename application/octet-stre… 1TfHbhi… <named list>  
drive_reveal(files, "starred")
#> # A dribble: 10 × 4
#>    name                 starred id       drive_resource   
#>    <chr>                <lgl>   <drv_id> <list>           
#>  1 name-squatter-rename FALSE   1AKZ-gI… <named list [41]>
#>  2 name-squatter-mv     FALSE   1XhjY-o… <named list [41]>
#>  3 name-squatter-upload FALSE   1jqPKMX… <named list [41]>
#>  4 name-squatter-rename FALSE   11P8Lgm… <named list [41]>
#>  5 name-squatter-mv     FALSE   1nsc4Iw… <named list [41]>
#>  6 name-squatter-upload FALSE   1HIDfXi… <named list [41]>
#>  7 name-squatter-rename FALSE   1QhQA9Z… <named list [41]>
#>  8 name-squatter-mv     FALSE   11yrtJ5… <named list [41]>
#>  9 name-squatter-upload FALSE   1QDyWHG… <named list [41]>
#> 10 name-squatter-rename FALSE   1TfHbhi… <named list [41]>
drive_reveal(files, "description")
#> # A dribble: 10 × 4
#>    name                 description id       drive_resource   
#>    <chr>                <list>      <drv_id> <list>           
#>  1 name-squatter-rename <NULL>      1AKZ-gI… <named list [41]>
#>  2 name-squatter-mv     <NULL>      1XhjY-o… <named list [41]>
#>  3 name-squatter-upload <NULL>      1jqPKMX… <named list [41]>
#>  4 name-squatter-rename <NULL>      11P8Lgm… <named list [41]>
#>  5 name-squatter-mv     <NULL>      1nsc4Iw… <named list [41]>
#>  6 name-squatter-upload <NULL>      1HIDfXi… <named list [41]>
#>  7 name-squatter-rename <NULL>      1QhQA9Z… <named list [41]>
#>  8 name-squatter-mv     <NULL>      11yrtJ5… <named list [41]>
#>  9 name-squatter-upload <NULL>      1QDyWHG… <named list [41]>
#> 10 name-squatter-rename <NULL>      1TfHbhi… <named list [41]>
drive_reveal(files, "version")
#> # A dribble: 10 × 4
#>    name                 version id       drive_resource   
#>    <chr>                <chr>   <drv_id> <list>           
#>  1 name-squatter-rename 3       1AKZ-gI… <named list [41]>
#>  2 name-squatter-mv     3       1XhjY-o… <named list [41]>
#>  3 name-squatter-upload 3       1jqPKMX… <named list [41]>
#>  4 name-squatter-rename 3       11P8Lgm… <named list [41]>
#>  5 name-squatter-mv     3       1nsc4Iw… <named list [41]>
#>  6 name-squatter-upload 3       1HIDfXi… <named list [41]>
#>  7 name-squatter-rename 3       1QhQA9Z… <named list [41]>
#>  8 name-squatter-mv     3       11yrtJ5… <named list [41]>
#>  9 name-squatter-upload 3       1QDyWHG… <named list [41]>
#> 10 name-squatter-rename 3       1TfHbhi… <named list [41]>
drive_reveal(files, "web_view_link")
#> # A dribble: 10 × 4
#>    name                 web_view_link           id       drive_resource
#>    <chr>                <chr>                   <drv_id> <list>        
#>  1 name-squatter-rename https://drive.google.c… 1AKZ-gI… <named list>  
#>  2 name-squatter-mv     https://drive.google.c… 1XhjY-o… <named list>  
#>  3 name-squatter-upload https://drive.google.c… 1jqPKMX… <named list>  
#>  4 name-squatter-rename https://drive.google.c… 11P8Lgm… <named list>  
#>  5 name-squatter-mv     https://drive.google.c… 1nsc4Iw… <named list>  
#>  6 name-squatter-upload https://drive.google.c… 1HIDfXi… <named list>  
#>  7 name-squatter-rename https://drive.google.c… 1QhQA9Z… <named list>  
#>  8 name-squatter-mv     https://drive.google.c… 11yrtJ5… <named list>  
#>  9 name-squatter-upload https://drive.google.c… 1QDyWHG… <named list>  
#> 10 name-squatter-rename https://drive.google.c… 1TfHbhi… <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-rename 2025-09-10 14:44:46 1AKZ-gI… <named list [41]>
#>  2 name-squatter-mv     2025-09-10 14:44:24 1XhjY-o… <named list [41]>
#>  3 name-squatter-upload 2025-09-10 13:47:59 1jqPKMX… <named list [41]>
#>  4 name-squatter-rename 2025-09-10 13:46:54 11P8Lgm… <named list [41]>
#>  5 name-squatter-mv     2025-09-10 13:46:25 1nsc4Iw… <named list [41]>
#>  6 name-squatter-upload 2025-09-10 03:46:55 1HIDfXi… <named list [41]>
#>  7 name-squatter-rename 2025-09-10 03:45:57 1QhQA9Z… <named list [41]>
#>  8 name-squatter-mv     2025-09-10 03:45:31 11yrtJ5… <named list [41]>
#>  9 name-squatter-upload 2025-09-10 03:23:10 1QDyWHG… <named list [41]>
#> 10 name-squatter-rename 2025-09-10 03:22:32 1TfHbhi… <named list [41]>
drive_reveal(files, "created_time")
#> # A dribble: 10 × 4
#>    name                 created_time        id       drive_resource   
#>    <chr>                <dttm>              <drv_id> <list>           
#>  1 name-squatter-rename 2025-09-10 14:44:46 1AKZ-gI… <named list [41]>
#>  2 name-squatter-mv     2025-09-10 14:44:24 1XhjY-o… <named list [41]>
#>  3 name-squatter-upload 2025-09-10 13:47:59 1jqPKMX… <named list [41]>
#>  4 name-squatter-rename 2025-09-10 13:46:54 11P8Lgm… <named list [41]>
#>  5 name-squatter-mv     2025-09-10 13:46:25 1nsc4Iw… <named list [41]>
#>  6 name-squatter-upload 2025-09-10 03:46:55 1HIDfXi… <named list [41]>
#>  7 name-squatter-rename 2025-09-10 03:45:57 1QhQA9Z… <named list [41]>
#>  8 name-squatter-mv     2025-09-10 03:45:31 11yrtJ5… <named list [41]>
#>  9 name-squatter-upload 2025-09-10 03:23:10 1QDyWHG… <named list [41]>
#> 10 name-squatter-rename 2025-09-10 03:22:32 1TfHbhi… <named list [41]>
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-rename TRUE        1AKZ-gI… <named list [41]>
#>  2 name-squatter-mv     TRUE        1XhjY-o… <named list [41]>
#>  3 name-squatter-upload TRUE        1jqPKMX… <named list [41]>
#>  4 name-squatter-rename TRUE        11P8Lgm… <named list [41]>
#>  5 name-squatter-mv     TRUE        1nsc4Iw… <named list [41]>
#>  6 name-squatter-upload TRUE        1HIDfXi… <named list [41]>
#>  7 name-squatter-rename TRUE        1QhQA9Z… <named list [41]>
#>  8 name-squatter-mv     TRUE        11yrtJ5… <named list [41]>
#>  9 name-squatter-upload TRUE        1QDyWHG… <named list [41]>
#> 10 name-squatter-rename TRUE        1TfHbhi… <named list [41]>
drive_reveal(files, "size")
#> # A dribble: 10 × 4
#>    name                 size  id       drive_resource   
#>    <chr>                <chr> <drv_id> <list>           
#>  1 name-squatter-rename 0     1AKZ-gI… <named list [41]>
#>  2 name-squatter-mv     0     1XhjY-o… <named list [41]>
#>  3 name-squatter-upload 0     1jqPKMX… <named list [41]>
#>  4 name-squatter-rename 0     11P8Lgm… <named list [41]>
#>  5 name-squatter-mv     0     1nsc4Iw… <named list [41]>
#>  6 name-squatter-upload 0     1HIDfXi… <named list [41]>
#>  7 name-squatter-rename 0     1QhQA9Z… <named list [41]>
#>  8 name-squatter-mv     0     11yrtJ5… <named list [41]>
#>  9 name-squatter-upload 0     1QDyWHG… <named list [41]>
#> 10 name-squatter-rename 0     1TfHbhi… <named list [41]>
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-rename 0                1AKZ-gI… <named list [41]>
#>  2 name-squatter-mv     0                1XhjY-o… <named list [41]>
#>  3 name-squatter-upload 0                1jqPKMX… <named list [41]>
#>  4 name-squatter-rename 0                11P8Lgm… <named list [41]>
#>  5 name-squatter-mv     0                1nsc4Iw… <named list [41]>
#>  6 name-squatter-upload 0                1HIDfXi… <named list [41]>
#>  7 name-squatter-rename 0                1QhQA9Z… <named list [41]>
#>  8 name-squatter-mv     0                11yrtJ5… <named list [41]>
#>  9 name-squatter-upload 0                1QDyWHG… <named list [41]>
#> 10 name-squatter-rename 0                1TfHbhi… <named list [41]>

# '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 [33]>