oli
What oli is
oli stands for OpenDAL Command Line Interface. It aims to provide a unified and user-friendly way to manipulate data stored in various storage services such as Object storage services(s3, azblob, gcs, minio, etc.), Key-Value services(Redis, etcd, TiKV, etc.), Filesystem-like service(HDFS, Azdls, etc.), and also all the other supported services.
How to use oli
oli provide basic sub-commands like oli ls, oli cat, oli stat, oli cp and oli rm, just like what you use on your local filesystem.
Install oli
oli could be installed by cargo:
cargois the Rust package manager.cargocould be installed by following the Installation from Rust official website.
Configure oli Profile
oli requires a config file to work, it should be:
~/.config/oli/config.tomlon Linux~/Library/Application Support/oli/config.tomlon macOSC:\Users\<UserName>\AppData\Roaming\oli\config.tomlon Windows
The content of config.toml should be follow these pattern:
[<profile_name>]
= "value1"
= "value2"
[<another_profile_name>]
= "value3"
= "value4"
Here is an example of config.toml:
[]
= "s3"
= "/assets"
= "<bucket>"
= "<region>"
= "https://s3.amazonaws.com"
= "<access_key_id>"
= "<secret_access_key>"
[]
= "s3"
= "/assets"
= "<bucket>"
= "auto"
= "https://<account_id>.r2.cloudflarestorage.com"
= "<access_key_id>"
= "<secret_access_key>"
For different services, you could find the configuration keys in the corresponding service document.
Example: use oli to upload file to AWS S3
$ oli cp ./update-ecs-loadbalancer.json s3://update-ecs-loadbalancer.json
$ oli ls s3://
fleet.png
update-ecs-loadbalancer.json
Example: use oli copy file from S3 to R2
$ oli cp s3://fleet.png r2://fleet.png
$ oli ls r2://
fleet.png
Contribute to oli
Contribution is not only about code, but also about documentation, examples, and so on! 🚀
If you have any questions or suggestions about oli, please feel free to open an issue on GitHub.
As oli is a part of Apache OpenDAL, you should follow the CONTRIBUTION documentation. There are still lots works to do with oli, you could track them on this GitHub Issue.