Hard-Sync-CLI is a fast and lightweight command-line tool for synchronizing two directories, written in Rust. It offers powerful features, including support for dry runs, file exclusion, and reverse syncing, making it a practical solution for anyone looking to manage file syncing efficiently.
- Speed and Simplicity: Written in Rust, ensuring fast and reliable performance.
 - Customization: Allows file exclusion and dry-run testing to give you full control.
 - Learning Project: Built as a hands-on project to explore Rust programming while solving a real-world problem.
 
- Prerequisites: Install Rust and Cargo (Get Rust).
 - Clone this repository:
git clone https://github.com/your-username/hard-sync-cli.git cd hard-sync-cli - Install the tool globally:
cargo install --path . - Confirm the installation:
hsync --help
 
Prebuilt binaries will be available on the Releases Page.
To display the help message:
hsync --helpThe sync command synchronizes files between two directories.
hsync sync --src <source_directory> --dest <destination_directory>| Option | Short-Hand | Description | 
|---|---|---|
--src <path> | 
-s <path> | 
Source directory to sync from. | 
--dest <path> | 
-d <path> | 
Destination directory to sync to. | 
--init | 
-i | 
Initialize the destination directory for syncing. | 
--reverse | 
-r | 
Reverse the source and destination directories. | 
--dry-run | 
-dr | 
Perform a dry run to show what changes would be made without syncing files. | 
--exclude <...> | 
-e <...> | 
Exclude specific files or directories during sync. Supports multiple entries. | 
- First-Time Sync:
hsync sync -s /path/to/source -d /path/to/destination -i
 - Dry Run:
hsync sync -s /path/to/source -d /path/to/destination -dr
 - Exclude Files:
hsync sync -s /path/to/source -d /path/to/destination -e "*.tmp" "ignore-this-folder/"
 - Reverse Sync:
hsync sync -s /path/to/source -d /path/to/destination -r
 
You can specify files or directories to exclude from syncing by creating a hard_sync.ignore file in the destination directory. The syntax is the same as a .gitignore file.
# Ignore all .tmp files
*.tmp
# Ignore a specific folder
ignore-this-folder/
# Ignore a specific file
do-not-sync.txt
- File Syncing: Sync files and directories from a source to a destination with support for initialization and reverse syncing.
 - Dry Run: Preview changes without applying them.
 - File Exclusion: Specify files or directories to exclude using the 
--excludeoption or anhard_sync.ignorefile. - Metadata Initialization: Use the 
--initflag to set up the destination directory for syncing. - Colorized Output: Get detailed status information with color-coded messages for errors, successes, and warnings.
 
- Bidirectional Syncing: Synchronize changes in both directions (
source ↔ destination). - Network Support: Enable syncing over SSH or SFTP.
 - Versioning: Create backups or versions of overwritten files.
 - Configuration Files: Support for 
.tomlor.jsonconfiguration files for advanced settings. 
This project is licensed under the MIT License. See the LICENSE file for details.
Contributions are welcome! Follow these steps to contribute:
- Fork the repository.
 - Create a feature branch (
git checkout -b feature/your-feature-name). - Commit your changes (
git commit -m "Add your message"). - Push to your fork (
git push origin feature/your-feature-name). - Open a pull request.
 
- Add dry-run functionality.
 - Add file exclusion via CLI and ignore files.
 - Add tests (unit and integration).
 - Support bidirectional syncing.
 - Improve error handling and logging.
 - Provide prebuilt binaries for major platforms.
 - Add support for syncing over a network.
 
Enjoy using Hard-Sync-CLI! If you encounter any issues, feel free to open an issue on GitHub. 😊