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:
@@ -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
|
||||
|
||||
|
||||
Reference in New Issue
Block a user