Add file conflict handling to minio-upload skill

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>
This commit is contained in:
Misaka Company
2026-01-28 13:45:43 +08:00
parent cbe3cfccba
commit 51eae214cc
2 changed files with 208 additions and 12 deletions

View File

@@ -19,6 +19,47 @@ 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 `.bak` file) before overwriting
- `--rename` - Automatically rename with numeric suffix (e.g., `file-1.md`, `file-2.md`)
### Examples
```bash
# 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.
@@ -52,8 +93,10 @@ The MinIO obsidian bucket contains Obsidian vaults as top-level directories:
1. **Verify file exists** - Check that the source file is accessible
2. **Determine target vault** - Use specified vault name or default to `main`
3. **Upload with mc** - Execute `mc cp` command to transfer file
4. **Confirm success** - Verify upload completed and report target location
3. **Check for conflicts** - Detect if file already exists in target vault
4. **Resolve conflict** - Prompt user or use specified option to handle conflict
5. **Upload with mc** - Execute `mc cp` command to transfer file
6. **Confirm success** - Verify upload completed and report target location
## Error Handling