返回资讯中心
外部精选
软件工程
#开发者实时流

TUI file manager for cloud and remote (S3) storage

Bucky brings the Midnight Commander dual-panel experience to your terminal, connecting

Hacker News 最新kermatt2026/10/21 · 25 天前19 分钟阅读

以下正文同步自 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 同步,内容未经改写;遇到排版缺失或需要图片、视频时请以原文为准。

打开原文
去社区讨论 →