Changelog · Get started · Documentation
~ The Omni Filetransfer Client Library (and more!) ~
Developed by @veeso
Current version: 0.3.1 (22/10/2024)
remotefs is a library that provides a file system structure to work with all the most popular file transfer protocols.
This is achieved through a trait called RemoteFs
which exposes methods to operate on the remote file system.
Currently the library exposes a client for Sftp, Scp, Kube, Ftp, WebDAV and Aws-s3 as external libraries.
You might be wondering, "why remotefs?" The first and foremost reason is to provide a generic interface over multiple protocols. For example, in termscp it allows the support of multiple protocols without any protocol-specific code. The second reason is that often, users just want a simple way to operate on a remote file system, however, they don't have the time to spend researching the ins and outs of each protocol.
Using remotefs, this is no longer a problem: all you need is to configure the options to your liking, then you're ready to connect.
- 📁 Different communication protocols
- Aws S3
- FTP and FTPS
- SFTP
- SCP
- SMB
- ✔️ Configurable: use only the client that you need
- 🤖 Extensible: adding new protocols is easy
- 🚀 Simple: easy to setup
- 😄 Understandable: no need to understand the underlying protocol
First, add remotefs
to your list of dependencies:
remotefs = "^0.3.0"
select over a variety of features:
find
: enable thefind()
method onRemoteFs
trait (enabled by default)no-log
: disable logging. By default, thelog
crate is used.
To use an existing client, you must add them to your Cargo.toml
, along with remotefs:
-
remotefs-aws-s3 = "^0.3.0"
-
remotefs-ftp = { version = "^0.3.0", features = [ "secure" ] }
-
remotefs-kube = "^0.3.0"
-
remotefs-smb = "^0.3.0"
-
remotefs-ssh = "^0.4.0"
-
remotefs-webdav = "^0.2.0"
As mentioned earlier, this library exposes a trait called RemoteFs
.
This trait exposes several methods to operate on a remote file system via the chosen client.
Let's briefly go over which methods are available:
- connect: connect to the remote host.
- disconnect: disconnect from the remote host.
- is_connected: returns whether the client is connected to the remote host.
- append_file: append specified buffer to the specified file.
- append: open a file for append and returns a stream to write to it.
- change_dir: change the working directory to provided path.
- copy: copy a file from the specified source path to the specified destination.
- create_dir: create a directory with the specified file mode at the specified path.
- create_file: create a file at a specified path with the specified content.
- create: create a file and returns a stream to write to it.
- exec: executes a shell command.
- exists: checks whether file at specified path exists.
- list_dir: get entries at the provided path.
- mov: move a file from the specified source path to the specified destination.
- open_file: open a file for reading and fill the specified buffer with the file content.
- open: open a file and returns a stream to read it.
- pwd: get working directory.
- remove_dir_all: remove file/directory and all of its content.
- remove_dir: remove directory at the specified path. It fails if it is not an empty directory.
- remove_file: remove file at the specified path. It fails if it is not a file.
- setstat: set file metadata for file at the specified path.
- stat: get file information of file at the specified path.
- symlink: create a symlink at the specified path, pointing to the specified file.
The following table states the compatibility for each client associated with the remote file system trait method.
Note: connect()
, disconnect()
and is_connected()
MUST always be supported, and are so omitted in the table.
Client/Method | Aws-S3 | Ftp | Kube | Scp | Sftp | Smb | WebDAV |
---|---|---|---|---|---|---|---|
append_file | No | Yes | No | No | Yes | Yes | No |
append | No | Yes | No | No | Yes | No | No |
change_dir | Yes | Yes | Yes | Yes | Yes | Yes | Yes |
copy | No | No | Yes | Yes | Yes | No | No |
create_dir | Yes | Yes | Yes | Yes | Yes | Yes | Yes |
create_file | Yes | Yes | Yes | Yes | Yes | Yes | Yes |
create | No | Yes | No | Yes | Yes | No | No |
exec | No | No | Yes | Yes | Yes | No | No |
exists | Yes | Yes | Yes | Yes | Yes | Yes | Yes |
list_dir | Yes | Yes | Yes | Yes | Yes | Yes | Yes |
mov | No | Yes | Yes | Yes | Yes | Yes | Yes |
open_file | Yes | Yes | Yes | Yes | Yes | Yes | Yes |
open | No | Yes | No | Yes | Yes | No | No |
pwd | Yes | Yes | Yes | Yes | Yes | Yes | Yes |
remove_dir_all | Yes | Yes | Yes | Yes | Yes | Yes | Yes |
remove_dir | Yes | Yes | Yes | Yes | Yes | Yes | Yes |
remove_file | Yes | Yes | Yes | Yes | Yes | Yes | Yes |
setstat | No | No | Yes | Yes | Yes | No | No |
stat | Yes | Yes | Yes | Yes | Yes | Yes | Yes |
symlink | No | No | Yes | Yes | Yes | Yes | No |
If you like remotefs and you're grateful for the work I've done, please consider a little donation 🥳
You can make a donation on the following platforms:
Contributions, bug reports, new features, and questions are welcome! 😉 If you have any questions or concerns, or you want to suggest a new feature, or you want just want to improve remotefs, feel free to open an issue or leave a pull request.
Please follow our contributing guidelines
View remotefs` changelog HERE
remotefs is licensed under the MIT license.
You can read the entire license HERE