GitHub Content Downloader
A powerful command-line tool to download files and folders from GitHub repositories. Download any file or entire directory from GitHub repositories without cloning - perfect for selectively downloading specific content.
Features
- Download single files from GitHub repositories
- Download entire folders recursively
- Download complete repositories
- Simple command-line interface (
ghcd
) - Support for both file URLs (blob) and folder URLs (tree)
- Customizable download location
- No authentication required for public repositories
Installation
Option 1: Install from PyPI
pip install github-content-downloader
Option 2: Install from source
git clone https://github.com/soykot2910/github-content-downloader.git
cd github-content-downloader
pip install .
Usage
Command Line Interface
- Download a complete repository:
ghcd https://github.com/username/repository
Example:
ghcd https://github.com/tensorflow/tensorflow
- Download a specific folder:
ghcd https://github.com/username/repository/tree/branch/folder
Example:
ghcd https://github.com/tensorflow/tensorflow/tree/master/tensorflow/python
- Download a single file:
ghcd https://github.com/username/repository/blob/branch/path/to/file
Example:
ghcd https://github.com/tensorflow/tensorflow/blob/master/README.md
- Specify custom output directory:
ghcd -o ./my-downloads <github-url>
- Interactive mode (if no URL provided):
ghcd
Command Line Options
ghcd --help
Available options:
-o, --output
: Specify output directory (default: ./downloaded_files)-h, --help
: Show help message
Python Package Usage
You can also use it as a Python package in your code:
from github_downloader import download_from_github
download_from_github("https://github.com/username/repository")
download_from_github(
"https://github.com/username/repository/tree/master/docs",
dest_folder="./my-downloads"
)
download_from_github(
"https://github.com/username/repository/blob/master/README.md"
)
URL Format Examples
1. Complete Repository
https://github.com/username/repository
Downloads the entire repository from the default branch (usually 'master' or 'main').
2. Specific Folder
https://github.com/username/repository/tree/branch/path/to/folder
Downloads only the specified folder and its contents.
3. Single File
https://github.com/username/repository/blob/branch/path/to/file
Downloads only the specified file.
Common Issues and Solutions
-
Permission Error: If you get a permission error while downloading, make sure you have write permissions in the output directory.
-
Invalid URL Format: Make sure your GitHub URL follows one of these patterns:
- Repository:
https://github.com/username/repo
- Folder:
https://github.com/username/repo/tree/branch/path
- File:
https://github.com/username/repo/blob/branch/path
-
Download Failed: If downloads fail, check:
- Your internet connection
- The repository is public and accessible
- The URL is correct and the resource exists
Requirements
- Python 3.6 or higher
requests
library (automatically installed with the package)
Development
Want to contribute? Great! Here's how:
- Fork the repository
- Create your feature branch (
git checkout -b feature/amazing-feature
) - Install development dependencies:
pip install -e .
- Make your changes
- Commit your changes (
git commit -m 'Add some amazing feature'
) - Push to the branch (
git push origin feature/amazing-feature
) - Open a Pull Request
License
This project is licensed under the MIT License - see the LICENSE file for details.
Author
Support
If you encounter any issues or have questions, please:
- Check the Common Issues section
- Open an issue on GitHub
- Contact the author via email
Acknowledgments
- Thanks to GitHub for providing their API
- Inspired by the need to download specific parts of repositories without cloning