Google Drive CLI
Manage Google Drive using the gdrv command-line tool.
Prerequisites
Ensure gdrv is installed and authenticated:
bash
gdrv --version export GDRV_CLIENT_ID="your-client-id" export GDRV_CLIENT_SECRET="your-client-secret" gdrv auth login --preset workspace-full
File Operations
bash
gdrv files list --json gdrv files list --paginate --json gdrv files list --query "name contains 'report'" --order-by "modifiedTime desc" --json gdrv files upload myfile.txt --json gdrv files download FILE_ID --output downloaded.txt gdrv files download FILE_ID --doc gdrv files delete FILE_ID --dry-run gdrv files delete FILE_ID gdrv files trash FILE_ID gdrv files restore FILE_ID
Folder Operations
bash
gdrv folders create "My Folder" --json gdrv folders list FOLDER_ID --json gdrv folders delete FOLDER_ID gdrv folders move FILE_ID PARENT_ID
Permissions
bash
gdrv permissions list FILE_ID --json gdrv permissions create FILE_ID --type user --email user@example.com --role reader gdrv permissions create FILE_ID --type user --email user@example.com --role writer gdrv permissions public FILE_ID gdrv permissions delete FILE_ID PERMISSION_ID
Google Sheets
bash
gdrv sheets list --json gdrv sheets list --paginate --json gdrv sheets create "My Sheet" --json gdrv sheets create "My Sheet" --parent FOLDER_ID --json gdrv sheets get SHEET_ID --json gdrv sheets values get SHEET_ID "Sheet1!A1:B10" --json gdrv sheets values update SHEET_ID "Sheet1!A1:B2" --values '[[1,2],[3,4]]' gdrv sheets values update SHEET_ID "Sheet1!A1" --values-file data.json --value-input-option USER_ENTERED gdrv sheets values append SHEET_ID "Sheet1!A1" --values '[[5,6]]' gdrv sheets values clear SHEET_ID "Sheet1!A1:B10" gdrv sheets batch-update SHEET_ID --requests-file batch-update.json
Google Docs
bash
gdrv docs list --json gdrv docs list --paginate --json gdrv docs create "My Doc" --json gdrv docs create "My Doc" --parent FOLDER_ID --json gdrv docs get DOC_ID --json gdrv docs read DOC_ID gdrv docs read DOC_ID --json gdrv docs update DOC_ID --requests-file updates.json
Google Slides
bash
gdrv slides list --json
gdrv slides list --paginate --json
gdrv slides create "My Presentation" --json
gdrv slides create "My Presentation" --parent FOLDER_ID --json
gdrv slides get PRESENTATION_ID --json
gdrv slides read PRESENTATION_ID
gdrv slides read PRESENTATION_ID --json
gdrv slides update PRESENTATION_ID --requests-file updates.json
gdrv slides replace PRESENTATION_ID --data '{"{{NAME}}":"Alice","{{DATE}}":"2026-01-24"}'
gdrv slides replace PRESENTATION_ID --file replacements.json
Shared Drives
bash
gdrv drives list --json gdrv drives list --paginate --json gdrv drives get DRIVE_ID --json gdrv files list --drive-id DRIVE_ID --json
Admin SDK
bash
gdrv auth service-account --key-file ./service-account-key.json --impersonate-user admin@example.com --preset admin gdrv admin users list --domain example.com --json gdrv admin users get user@example.com --json gdrv admin users create newuser@example.com --given-name "John" --family-name "Doe" --password "TempPass123!" gdrv admin users update user@example.com --given-name "Jane" --family-name "Smith" gdrv admin users suspend user@example.com gdrv admin users delete user@example.com gdrv admin groups list --domain example.com --json gdrv admin groups create group@example.com "Team Group" --description "Team access group" gdrv admin groups members list team@example.com --json gdrv admin groups members add team@example.com user@example.com --role MEMBER gdrv admin groups members remove team@example.com user@example.com
Sync
bash
gdrv sync init ./local-folder REMOTE_FOLDER_ID --json gdrv sync init ./local-folder REMOTE_FOLDER_ID --direction push --conflict local-wins --json gdrv sync init ./local-folder REMOTE_FOLDER_ID --exclude "*.tmp,node_modules" --json gdrv sync list --json gdrv sync status CONFIG_ID --json gdrv sync CONFIG_ID --json gdrv sync push CONFIG_ID --json gdrv sync pull CONFIG_ID --json gdrv sync CONFIG_ID --delete --json gdrv sync CONFIG_ID --concurrency 10 --json gdrv sync remove CONFIG_ID --json
Config
bash
gdrv config show gdrv config set output_format json gdrv config reset
Multiple Profiles
bash
gdrv auth login --profile work gdrv auth login --profile personal gdrv --profile work files list --json
Agent Best Practices
- •Always use
--jsonfor machine-readable output - •Use
--paginateto get all results without missing items - •Use
--dry-runbefore destructive operations - •Use file IDs not paths for Shared Drives
- •Check exit codes: 0=success, 1=general error, 2=auth required, 3=invalid argument, 4=not found, 5=permission denied, 6=rate limited
Common Workflows
Upload and Share
bash
RESULT=$(gdrv files upload report.pdf --json) FILE_ID=$(echo $RESULT | jq -r '.id') gdrv permissions create $FILE_ID --type user --email user@example.com --role reader
Search and Download
bash
gdrv files list --query "mimeType = 'application/pdf'" --order-by "modifiedTime desc" --json gdrv files download FILE_ID --output local-copy.pdf
Create Sheet with Data
bash
RESULT=$(gdrv sheets create "Data Report" --json) SHEET_ID=$(echo $RESULT | jq -r '.spreadsheetId') gdrv sheets values update $SHEET_ID "Sheet1!A1" --values '[["Name","Value"],["Item1",100],["Item2",200]]'
Sync Local Folder with Drive
bash
RESULT=$(gdrv sync init ./projects REMOTE_FOLDER_ID --json) CONFIG_ID=$(echo $RESULT | jq -r '.id') gdrv sync status $CONFIG_ID --json gdrv sync $CONFIG_ID --json