| name | fastcopy-file-transfer-utility |
| description | High-performance file copying and transfer utility with parallel streams, integrity verification, and automation capabilities |
| triggers | ["how do I use FastCopy for bulk file transfers","configure FastCopy with YAML profiles","set up parallel file copying with FastCopy","FastCopy CLI commands and options","automate file transfers with FastCopy","verify file integrity during FastCopy transfers","create FastCopy transfer profiles","optimize FastCopy performance settings"] |
FastCopy File Transfer Utility
Skill by ara.so — Devtools Skills collection.
Overview
FastCopy is a high-performance file duplication and transfer utility that supports multi-threaded copying, integrity verification, profile-based automation, and cross-platform operation. It's designed for scenarios requiring fast, reliable bulk file transfers, backups, migrations, and synchronization.
Key capabilities:
- Parallel stream transfers (up to 64 concurrent streams)
- YAML-based profile configuration
- CLI and GUI modes
- Integrity checking (SHA-256, CRC-32)
- Auto-retry and resume on failure
- Platform support: Windows, macOS, Linux
Installation
Windows
macOS
chmod +x fastcopy
sudo mv fastcopy /usr/local/bin/
Linux
sudo apt-get install fastcopy
sudo dnf install fastcopy
yay -S fastcopy
CLI Commands
Basic Usage
fastcopy /source/path /destination/path
fastcopy /source /dest --streams 32
fastcopy /source /dest --verify
fastcopy /source /dest --priority high --log-level debug
fastcopy large_file.iso /backups/ --no-verify
fastcopy /source /dest --tag "backup_2026_07_15"
Profile-Based Transfers
fastcopy --profile /path/to/profile.yaml
fastcopy --profile profile.yaml --streams 64
fastcopy --list-profiles
fastcopy --profile profile.yaml --dry-run
Advanced Options
fastcopy /source /dest --resume
fastcopy /source /dest --watch --interval 300
fastcopy /source /dest --exclude "*.tmp,*.log"
fastcopy /source /dest --include "*.mp4,*.mov"
fastcopy /source /dest --limit 100
fastcopy /source /dest --report /path/to/report.json
Configuration
YAML Profile Structure
Create a profile file (e.g., production-backup.yaml):
transfer:
mode: "turbo"
streams: 48
buffer_size_mb: 256
verify: true
resume: always
retry_count: 5
retry_backoff_seconds: 30
paths:
source: "/mnt/production/data"
destination: "/mnt/backup/daily"
filters:
include:
- "*.sql"
- "*.bak"
- "*.json"
exclude:
- "*.tmp"
- "*.cache"
- ".git/*"
schedule:
type: "cron"
cron_expression: "0 2 * * *"
performance:
priority: "high"
use_cache: true
prefetch: true
compression: false
logging:
level: "info"
file: "/var/log/fastcopy/production-backup.log"
rotate: true
max_size_mb: 100
hooks:
on_start: "/opt/scripts/notify_start.sh"
on_complete: "/opt/scripts/notify_complete.sh {bytes} {duration}"
on_error: "/opt/scripts/alert_error.sh {error}"
on_retry: "echo 'Retrying transfer...'"
notifications:
email:
enabled: true
smtp_server: "smtp.company.com"
from: "fastcopy@company.com"
to: ["admin@company.com"]
on_events: ["complete", "error"]
Minimal Profile
transfer:
mode: "balanced"
streams: 16
verify: true
paths:
source: "/source/folder"
destination: "/backup/folder"
Watch Mode Profile
transfer:
mode: "standard"
streams: 8
verify: true
resume: on_failure
paths:
source: "/home/user/Documents"
destination: "/mnt/nas/Documents"
schedule:
type: "watch"
interval_seconds: 600
filters:
exclude:
- ".DS_Store"
- "Thumbs.db"
- "*.swp"
Common Patterns
Bulk Media Migration
transfer:
mode: "turbo"
streams: 64
buffer_size_mb: 512
verify: true
resume: always
paths:
source: "/mnt/old-storage/media"
destination: "/mnt/new-storage/media"
filters:
include:
- "*.mp4"
- "*.mov"
- "*.mkv"
- "*.avi"
performance:
priority: "high"
use_cache: true
prefetch: true
logging:
level: "info"
file: "/var/log/fastcopy/media-migration.log"
hooks:
on_complete: "notify-send 'Media migration complete'"
fastcopy --profile media-migration.yaml
Database Backup
transfer:
mode: "balanced"
streams: 16
buffer_size_mb: 128
verify: true
resume: always
paths:
source: "/var/lib/postgresql/backups"
destination: "//nas.company.local/db-backups"
schedule:
type: "cron"
cron_expression: "0 3 * * *"
hooks:
on_start: "pg_dump -U postgres mydb > /var/lib/postgresql/backups/mydb_$(date +%Y%m%d).sql"
on_complete: "find /var/lib/postgresql/backups -mtime +7 -delete"
on_error: "curl -X POST https://hooks.slack.com/services/$SLACK_WEBHOOK -d '{\"text\":\"DB backup failed\"}'"
Development Environment Sync
const { execSync } = require('child_process');
const fs = require('fs');
const path = require('path');
class FastCopySync {
constructor(profilePath) {
this.profilePath = profilePath;
}
sync(options = {}) {
const args = ['fastcopy', '--profile', this.profilePath];
if (options.streams) args.push('--streams', options.streams);
if (options.priority) args.push('--priority', options.priority);
if (options.dryRun) args.push('--dry-run');
const cmd = args.join(' ');
console.log(`Executing: ${cmd}`);
try {
const output = execSync(cmd, { encoding: 'utf8' });
console.log(output);
return { success: true, output };
} catch (error) {
console.error('FastCopy failed:', error.message);
return { success: false, error: error.message };
}
}
createProfile(source, destination, config = {}) {
const profile = {
transfer: {
mode: config.mode || 'balanced',
streams: config.streams || 16,
verify: config.verify !== false,
resume: config.resume || 'on_failure'
},
paths: { source, destination },
filters: config.filters || {},
hooks: config.hooks || {}
};
const profilePath = path.join(process.cwd(), 'fastcopy-profile.yaml');
fs.writeFileSync(profilePath, JSON.stringify(profile, null, 2));
return profilePath;
}
}
const syncer = new FastCopySync('/config/dev-sync.yaml');
syncer.sync({ priority: 'normal' });
Python Automation Script
import subprocess
import yaml
import os
from datetime import datetime
class FastCopyManager:
def __init__(self, profile_path=None):
self.profile_path = profile_path
def execute(self, source=None, destination=None, **kwargs):
"""Execute FastCopy with optional parameters"""
cmd = ['fastcopy']
if self.profile_path:
cmd.extend(['--profile', self.profile_path])
elif source and destination:
cmd.extend([source, destination])
else:
raise ValueError("Must provide profile or source/destination")
if kwargs.get('streams'):
cmd.extend(['--streams', str(kwargs['streams'])])
if kwargs.get('verify'):
cmd.append('--verify')
if kwargs.get('priority'):
cmd.extend(['--priority', kwargs['priority']])
if kwargs.get('tag'):
cmd.extend(['--tag', kwargs['tag']])
print(f"Executing: {' '.join(cmd)}")
try:
result = subprocess.run(cmd, capture_output=True, text=True, check=True)
return {'success': True, 'output': result.stdout}
except subprocess.CalledProcessError as e:
return {'success': False, 'error': e.stderr}
def create_profile(self, source, destination, **config):
"""Generate YAML profile programmatically"""
profile = {
'transfer': {
'mode': config.get('mode', 'balanced'),
'streams': config.get('streams', 16),
'verify': config.get('verify', True),
'resume': config.get('resume', 'on_failure')
},
'paths': {
'source': source,
'destination': destination
}
}
if 'filters' in config:
profile['filters'] = config['filters']
if 'hooks' in config:
profile['hooks'] = config['hooks']
profile_path = f'/tmp/fastcopy_profile_{datetime.now().strftime("%Y%m%d_%H%M%S")}.yaml'
with open(profile_path, 'w') as f:
yaml.dump(profile, f, default_flow_style=False)
return profile_path
if __name__ == '__main__':
manager = FastCopyManager()
profile = manager.create_profile(
'/data/source',
'/backup/destination',
mode='turbo',
streams=32,
verify=True,
filters={'exclude': ['*.tmp', '*.log']},
hooks={'on_complete': 'echo "Backup complete"'}
)
result = manager.execute(profile_path=profile)
print(result)
Environment Variables
FastCopy supports environment variable configuration:
export FASTCOPY_PROFILE_DIR="/etc/fastcopy/profiles"
export FASTCOPY_LOG_LEVEL="info"
export FASTCOPY_STREAMS=32
export FASTCOPY_WEBHOOK_URL="https://hooks.slack.com/services/YOUR_WEBHOOK"
export SMTP_SERVER="smtp.company.com"
export SMTP_FROM="fastcopy@company.com"
export SMTP_TO="admin@company.com"
export OPENAI_API_KEY="your-key-here"
export ANTHROPIC_API_KEY="your-key-here"
Troubleshooting
Transfer Fails Midway
fastcopy /source /dest --resume always --retry-count 10
fastcopy /source /dest --log-level debug --log-file /tmp/fastcopy.log
Performance Issues
transfer:
mode: "turbo"
streams: 48
buffer_size_mb: 512
performance:
priority: "high"
use_cache: true
prefetch: true
Permission Errors
sudo fastcopy /source /dest
sudo chown -R $USER:$USER /destination
chmod -R u+rw /destination
Integrity Check Failures
fastcopy /source /dest --verify --force
fastcopy /source /dest --checksum sha256
fastcopy /source /dest --no-verify
Profile Validation
fastcopy --profile profile.yaml --validate
fastcopy --profile profile.yaml --dry-run
fastcopy --show-defaults
Network Transfer Issues
transfer:
retry_count: 10
retry_backoff_seconds: 60
timeout_seconds: 300
performance:
bandwidth_limit_mbps: 100
tcp_window_size_kb: 256
Best Practices
- Always verify critical transfers: Use
verify: true for important data
- Use profiles for recurring tasks: Store configurations in version control
- Monitor large transfers: Use
--log-level info and check logs
- Test with dry-run: Validate configuration before executing
- Implement hooks: Automate pre/post transfer tasks
- Set appropriate stream counts: 16-32 for network, 32-64 for local SSD
- Enable resume for unreliable connections: Use
resume: always
- Tag transfers: Use
--tag for tracking and auditing