GD-Backup: A CLI Cloud Backup Tool

January 3rd, 2023

GoGoogle Drive

In the world of data management and cloud storage, having a reliable and efficient backup solution is crucial. Today, we'll explore GD-Backup, a powerful command-line interface (CLI) tool designed to simplify the process of backing up your local files to Google Drive. This tool not only provides an easy-to-use interface but also leverages modern programming techniques to optimize performance.

Key Features of GD-Backup

  • Console UI: GD-Backup features a user-friendly console interface that lists which folders and files are backed up and which aren't. It also indicates if any files or folders have been modified since the last backup, making it easy to track changes.

  • Optimized Performance: One of the standout features of GD-Backup is its use of goroutines for uploading files. This implementation has led to significant performance improvements, with upload speeds increased by up to 73% in some cases.

  • Google Drive Integration: The tool seamlessly integrates with Google Drive, allowing users to back up their files directly to their cloud storage.

  • Simple Commands: GD-Backup offers straightforward commands for listing files and initiating backups.

Usage

GD-Backup provides two main commands:

  • backup -list: Lists all files in the current directory and their backup status
  • backup -this: Backs up the current directory

Visual Examples

Let's take a look at some visual examples of GD-Backup in action:

  1. Uploading Files:

Uploading Files

  1. Folder Structure:

Folder Structure

  1. List of Files with Backup Status:

File List with Status

  1. Subfolders and Their Contents:

Subfolder Contents

  1. Detailed File List:

Detailed File List

Under the Hood

GD-Backup is written in Go, taking advantage of the language's concurrency features. Here's a snippet from the main.go file that demonstrates how the tool handles file uploads using goroutines:

func uploadFile(service *drive.Service, file os.FileInfo, localPath string, parentID string, wg *sync.WaitGroup) {
    defer wg.Done()
    // ... (file upload logic)
}

func backupFolder(service *drive.Service, folderPath string, parentID string) error {
    files, err := ioutil.ReadDir(folderPath)
    if err != nil {
        return err
    }

    var wg sync.WaitGroup
    for _, file := range files {
        if file.IsDir() {
            // ... (handle subdirectories)
        } else {
            wg.Add(1)
            go uploadFile(service, file, filepath.Join(folderPath, file.Name()), parentID, &wg)
        }
    }
    wg.Wait()
    return nil
}

This code snippet showcases how GD-Backup utilizes goroutines to upload multiple files concurrently, significantly improving backup speed.

Performance Considerations

While the use of goroutines has greatly enhanced upload speeds, it's worth noting that the Google Drive API's user rate limit can sometimes act as a bottleneck. Depending on the size and number of files being uploaded, this limit may restrict the full potential of the concurrent uploads.

Conclusion

GD-Backup offers a powerful and user-friendly solution for backing up local files to Google Drive. Its console UI, optimized performance through goroutines, and simple command structure make it an excellent tool for both casual users and developers looking for an efficient backup solution.

By leveraging modern programming techniques and providing clear visual feedback, GD-Backup streamlines the backup process and helps users maintain up-to-date copies of their important files in the cloud.

Check out the GD-Backup repository on GitHub for more details and to contribute to the project!