Storify
A unified command-line tool for managing object storage with HDFS-like interface.
Features
- Multi-cloud support: OSS, S3, MinIO, COS, HDFS, and local filesystem
- HDFS-compatible commands: Familiar interface for Hadoop users
- Profile management: Encrypted storage for multiple configurations
- Unified configuration: Single tool for all storage providers
- High performance: Async I/O with progress reporting
- Cross-platform: Works on Linux, macOS, and Windows
Installation
From Source
The binary will be available at target/release/storify.
From Cargo (when published)
Quick Start
Using Profiles (Recommended)
Create and manage encrypted configuration profiles:
# Create a new profile interactively
# Create with flags
# List all profiles
# Set default profile
Using Environment Variables
Set your storage provider and credentials:
# Choose provider: oss, s3, minio, cos, fs, hdfs or azblob
# Common configuration
# Optional
Provider-Specific Variables
# OSS
# AWS S3
# MinIO
# COS (Tencent Cloud)
# Filesystem
STORAGE_ROOT_PATH=./storage
# HDFS
HDFS_NAME_NODE=hdfs://namenode:8020
HDFS_ROOT_PATH=/user/data
Variable Priority: STORAGE_* overrides provider-specific variables (e.g., STORAGE_BUCKET overrides OSS_BUCKET).
Usage
Storage Operations
# List directory contents
# Download files/directories
# Upload files/directories
# Copy within storage
# Move/rename within storage
# Create directories
# Display file contents
# Display beginning of file
# Display end of file
# Search for patterns
# Find objects by name/regex/type
# Show directory structure as a tree
# Show disk usage
# Delete files/directories
# Show object metadata
Command Reference
Storage Commands
| Command | Description | Options |
|---|---|---|
ls |
List directory contents | -L (detailed), -R (recursive) |
get |
Download files from remote | |
put |
Upload files to remote | -R (recursive) |
cp |
Copy files within storage | |
mv |
Move/rename files within storage | |
mkdir |
Create directories | -p (create parents) |
cat |
Display file contents | |
head |
Display beginning of file | -n (lines), -c (bytes), -q (quiet), -v (verbose) |
tail |
Display end of file | -n (lines), -c (bytes), -q (quiet), -v (verbose) |
grep |
Search for patterns in files | -i (case-insensitive), -n (line numbers) ,-R (recursive) |
find |
Find objects by name/regex/type | --name <GLOB>, --regex <RE>, `--type <f |
rm |
Delete files/directories | -R (recursive), -f (force) |
tree |
View directory structure as a tree | -d <DEPTH>, --dirs-only |
du |
Show disk usage | -s (summary) |
stat |
Show object metadata | --json, --raw |
Config Commands
| Command | Description | Options |
|---|---|---|
config create |
Create/update profile | Provider-specific flags, --anonymous, --make-default, --force |
config list |
List all profiles | --show-secrets |
config show |
Show configuration | --profile <NAME>, --default, --show-secrets |
config set |
Set/clear default profile | <NAME> or --clear |
config delete |
Delete a profile | <NAME>, --force |
Supported Providers
| Provider | Type | Anonymous Support |
|---|---|---|
| OSS | Alibaba Cloud Object Storage | ✅ Yes |
| S3 | Amazon S3 | ✅ Yes |
| MinIO | Self-hosted S3-compatible | ✅ Yes |
| COS | Tencent Cloud Object Storage | ❌ No |
| FS | Local Filesystem | ✅ Yes (always) |
| HDFS | Hadoop Distributed File System | ❌ No |
| Azblob | Azure Cloud Object Storage | ❌ No |
Architecture
Built on OpenDAL for unified storage access.
┌─────────────────────────────────────┐
│ Storify CLI │
├─────────────────────────────────────┤
│ Profile Store (Encrypted) │
├─────────────────────────────────────┤
│ Config Loader │
├─────────────────────────────────────┤
│ Storage Client │
├─────────────────────────────────────┤
│ OpenDAL │
├─────────────────────────────────────┤
│ OSS │ S3 │ COS │ HDFS │ FS │ Azblob │
└─────────────────────────────────────┘
Security
- Encryption: Profile store uses AES-256-GCM encryption
- File Permissions: Unix systems set 0600 permissions on profile store
- Atomic Writes: Configuration changes use atomic file operations
- Backup: Automatic backup (
.bak) before modifications
Development
Prerequisites
- Rust 1.80+ (specified in
rust-toolchain.toml) - Cargo
- Git
Building
# Debug build
# Release build (optimized)
# Run tests
# Run with clippy
Contributing
We welcome contributions! Please see our Contributing Guide for details.
License
Apache License 2.0 - see LICENSE for details.