
TUI file manager for cloud and remote (S3) storage
Bucky brings the Midnight Commander dual-panel experience to your terminal, connecting
以下正文同步自 Hacker News 最新,版权归原站所有,已转换为易读排版。
Bucky brings the Midnight Commander dual-panel experience to your terminal, connecting Amazon S3, Google Cloud Storage, SFTP, and your local filesystem through a single, keyboard-driven interface. Built with Go and the Charm Bracelet stack.
Dual-panel browsing -- remote on the left, local on the right, switchable with Tab
Four backends -- S3, GCS, SFTP, and local filesystem through a unified interface
Profile picker -- choose a connection at startup, or jump straight in with --profile
Two-phase transfers -- arm a transfer on the source panel, confirm on the destination
Panel-to-panel sync -- preview-first sync workflow with include/exclude patterns, dry-run, and configurable compare modes
Multi-select -- Space to check rows, then bulk transfer, move, or delete
Vim-style rename modal -- full normal/insert/visual mode editing for file names
File preview -- syntax-highlighted preview overlay with CSV rainbow columns
Sort and filter -- by name, size, or date; toggle hidden files; live search with /
Metadata pane -- inspect file details and storage-specific metadata
Transfer progress -- floating modal with progress bars and cancel support
Structured logs -- dedicated log panel for debugging and operation history
Theming -- auto, dark, and light modes
Installation
Requirements
Go 1.25.0 or newer
A terminal with ANSI color support
Credentials for any remote backends you plan to use
Install
go install github.com/mrpbennett/bucky/cmd/bucky@latest
Build from source
git clone https://github.com/mrpbennett/bucky.git cd bucky go build -o bucky ./cmd/bucky
Run
./bucky # launch with profile picker ./bucky --profile prod_s3 # connect directly to a profile ./bucky -p staging_sftp # short flag
Configuration
Bucky reads a single TOML file at ~/.config/bucky/config.toml. If this file is missing or invalid, Bucky exits with an error.
theme = "auto" # auto | dark | light sort_by = "name" # name | size | date sort_order = "asc" # asc | desc show_hidden = false local_start_at_cwd = true # true: launch directory; false: home directory
Sync defaults (optional)
[sync] dry_run_default = true compare_mode = "mtime_size" # mtime_size | size_only | exact_timestamps delete_default = false no_overwrite_default = false concurrency = 4
Backends
Amazon S3 [profile.prod_s3] type = "s3" bucket = "my-prod-bucket" # use "*" or omit to list all accessible buckets region = "us-east-1" # defaults to us-east-1 prefix = "backups/"
Optional fields: endpoint (for S3-compatible APIs), access_key + secret_key (or the AWS-standard aws_access_key_id + aws_secret_access_key), aws_profile, aws_credentials_file, aws_config_file.
Bucky also auto-discovers non-default entries from ~/.aws/credentials and surfaces them as profiles if not already defined.
[profile.staging_sftp]
type = "sftp"
host = "sftp.example.com"
port = 22 # defaults to 22
username = "deploy"
private_key_path = "/.ssh/id_ed25519"
known_hosts_path = "/.ssh/known_hosts" # defaults to ~/.ssh/known_hosts
prefix = "/var/data/"
Auth options: password, private_key_path (with optional private_key_passphrase). Both can be combined.
Set insecure_ignore_host_key = true to skip host key verification (not recommended for production).
[profile.analytics_gcs] type = "gcs" bucket = "analytics-bucket" project_id = "my-project" gcp_credentials_file = "~/.config/gcloud/app-credentials.json" prefix = "exports/"
Auth: Set gcp_credentials_file for explicit credentials, or rely on Application Default Credentials (gcp_use_adc = true, the default). Optional endpoint override.
Two-phase transfer (t)
Focus the source panel and select files with Space (or just position the cursor).
Press t to arm the transfer.
Navigate to the destination directory on the opposite panel.
Press t again from either panel to execute.
Starting from the left (remote) panel downloads; starting from the right (local) panel uploads.
Select source items on the remote panel and press m.
Navigate to the destination path, then press m again to execute.
Moves are destructive and only operate within the remote backend.
Focus the source panel and position the cursor on the directory to sync.
Press s to open the sync setup overlay.
Configure direction, compare mode, include/exclude patterns, and dry-run toggle.
Press Enter to generate a preview plan showing exactly what will change.
Review the plan, then press Enter to execute (or e to return to setup).
Sync workflow GIF
Press p on any file to open a syntax-highlighted preview overlay. CSV and TSV files get rainbow column coloring. Preview reads up to 64 KiB of content.
Press R to open a Vim-style rename modal with full normal, insert, and visual mode support.
Global and Panel Focus
Key Action
? Toggle help overlay
i Toggle metadata pane
Tab Switch between left/right panels
1 Focus left panel
2 Focus right panel
3 Focus log panel
[ Toggle left pane
] Toggle right pane
P Return to profile picker
Esc Cancel active transfer/move/sync mode
Navigation
Key Action
Up / k Move cursor up
Down / j Move cursor down
Ctrl+d Half-page down
Ctrl+u Half-page up
Enter / l Open directory
- / h Go to parent directory
gg Jump to first row
G Jump to last row
q / Ctrl+c Quit app
Selection and File Actions
Key Action
Space Toggle selection on current row and advance cursor
a Create a new directory
t Transfer (two-phase: arm then confirm)
m Move on remote backend (two-phase: arm then confirm)
d Delete with confirmation modal
r Refresh current directory
R Rename (opens Vim-style modal)
p Preview file
s Open sync setup
Sorting, Visibility, and Search
Key Action
o Cycle sort field: name, size, date
O Toggle sort direction
. Toggle hidden files
/ Open live search
Enter Accept search
Esc Cancel search
S is reserved for a future repeat-sync shortcut.
Preview reads up to 64 KiB. CSV/TSV files use rainbow column coloring.
go build -o bucky ./cmd/bucky # build binary go run ./cmd/bucky # run without building go install ./cmd/bucky # install to $GOPATH/bin go test ./... # run all tests go vet ./... # static analysis gofmt -w . # format code
Project layout
cmd/bucky/main.go CLI entrypoint internal/ backend/ Storage backend interface and implementations s3.go, sftp.go, gcs.go, local.go, multibucket.go config/ Config loading and profile parsing transfer/ Transfer primitives and progress messages ui/ app.go Root Bubble Tea model browser/ Dual-panel file browser component transfer/ Transfer queue and progress display status/ Status bar with keybinding hints assets/ Logo and static assets docs/ Design documents and implementation plan
Architecture
The Backend interface (internal/backend/) is the core abstraction. S3, GCS, SFTP, and Local backends all implement the same interface so the UI layer never deals with storage-specific logic.
The UI layer (internal/ui/) uses Bubble Tea's Elm architecture (Model / Update / View). The root app.go model orchestrates panels, overlays, and the transfer queue.
The Transfer engine (internal/transfer/) runs outside the Bubble Tea event loop via goroutines, pushing progress updates back through program.Send(). Supports concurrent transfers with configurable limits.
Config (internal/config/) parses TOML profiles from ~/.config/bucky/config.toml using Viper.
正文由 探How 从来源站点 RSS 同步,内容未经改写;遇到排版缺失或需要图片、视频时请以原文为准。