Implement comprehensive file conflict detection and resolution: - Check for existing files before upload using mc stat (fixes mc ls bug) - Interactive prompt when conflict detected: overwrite, skip, backup, rename - Command-line options for non-interactive use: --force, --skip, --backup, --rename - Auto-rename with numeric suffix when file exists - Backup existing files with .bak extension before overwriting - Update SKILL.md with conflict handling documentation and examples Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>
4.4 KiB
name, description
| name | description |
|---|---|
| minio-upload | Upload files to Obsidian vaults via MinIO obsidian bucket. Use when user asks to upload files to Obsidian, transfer notes to vaults, sync markdown files to Obsidian, or specify a particular vault destination. The obsidian bucket serves as the sync directory for Obsidian note-taking app. |
MinIO Upload
Upload files to Obsidian vaults through the MinIO obsidian bucket. This bucket serves as the synchronization directory for the Obsidian note-taking application, where each top-level directory represents a separate vault.
Quick Start
Upload a file to the default main vault:
.claude/skills/minio-upload/scripts/upload_to_obsidian.sh path/to/file.md
Upload to a specific vault:
.claude/skills/minio-upload/scripts/upload_to_obsidian.sh path/to/file.md "journal"
File Conflict Handling
CRITICAL: When a file with the same name already exists in the target vault, the script will prompt you to choose an action (unless an option is specified).
Interactive Prompt (Default)
If the file exists and no option is provided, you'll see:
⚠️ File 'filename.md' already exists in vault 'main'
Choose an action:
[o] Overwrite - Replace existing file
[s] Skip - Cancel upload
[b] Backup - Backup existing file (.bak) then overwrite
[r] Rename - Upload with new name (adds numeric suffix)
Command-Line Options
You can specify the behavior explicitly to skip the prompt:
--force- Overwrite existing files without prompting--skip- Skip upload if file already exists--backup- Backup existing file (creates.bakfile) before overwriting--rename- Automatically rename with numeric suffix (e.g.,file-1.md,file-2.md)
Examples
# Force overwrite without prompting
upload_to_obsidian.sh file.md main --force
# Skip if file exists
upload_to_obsidian.sh file.md journal --skip
# Backup before overwriting
upload_to_obsidian.sh file.md work --backup
# Auto-rename if conflict
upload_to_obsidian.sh file.md personal --rename
Vault Configuration
CRITICAL RULE: When no vault is explicitly specified by the user, files MUST be uploaded to the main vault only. Do NOT assume or invent other vault names.
Understanding Vault Structure
The MinIO obsidian bucket contains Obsidian vaults as top-level directories:
- Bucket root:
minio/obsidian/ - Vaults: Each top-level directory is a separate Obsidian vault (e.g.,
main/,journal/,work/) - Files uploaded to:
minio/obsidian/{vault-name}/{filename}
Vault Selection Behavior
- No vault specified: Upload to
mainvault (DEFAULT - use this unless user explicitly requests otherwise) - Specific vault specified: Use the exact vault name provided by the user (e.g.,
journal,work-notes,personal) - Nested directories: If a vault name contains slashes, it will be normalized (e.g.,
notes/journalbecomesnotes/journal/)
Important Constraints
- Never assume vaults: If the user doesn't specify a vault, always use
main - User intent only: Only use non-default vaults when the user explicitly names them
- Vault validation: The script automatically normalizes paths and appends the filename
Examples
- User says "upload file.md" → Upload to
mainvault - User says "upload to my journal vault" → Upload to
journalvault - User says "upload to work-notes" → Upload to
work-notesvault
Workflow
- Verify file exists - Check that the source file is accessible
- Determine target vault - Use specified vault name or default to
main - Check for conflicts - Detect if file already exists in target vault
- Resolve conflict - Prompt user or use specified option to handle conflict
- Upload with mc - Execute
mc cpcommand to transfer file - Confirm success - Verify upload completed and report target location
Error Handling
The script will:
- Exit with error if file doesn't exist
- Exit with error if no file argument provided
- Propagate any mc command failures
Resources
scripts/upload_to_obsidian.sh
Bash script that handles the upload process. Validates inputs, constructs the target vault path, and executes the mc copy command.
Key features:
- Default to
mainvault when no vault name specified - Support vault names with proper path normalization
- Clear error messages for invalid inputs
- Success confirmation with source and target paths