A collection of personal utility scripts for media processing and file management — always at hand on any machine.
Add this alias to your .bashrc or .zshrc:
alias tools='curl -Ls https://raw.githubusercontent.com/thegabriele97/shtools/main/launcher.sh | bash -s --'Then run:
toolsThis opens an interactive TUI where you can browse all available scripts, read their description, usage, and examples — and run them directly.
Optional:
fzfenables a modern, fast interactive interface. If not available, the script automatically falls back to a minimal menu-based interface.
Interactive mode — browse and run scripts via TUI:
toolsDirect mode — run a script directly with arguments:
tools <command> [args...]| Command | Description | Dependencies |
|---|---|---|
compress-images |
Compress images to WebP preserving folder structure | cwebp, parallel |
compress-video |
Compress video files in a folder while preserving all metadata | ffmpeg |
compress-video-sample-compare |
Generate compressed clips at different CRF values for visual comparison | ffmpeg |
| Command | Description | Dependencies |
|---|---|---|
concat-clips |
Inspect, normalize and concatenate video clips into a single file | ffmpeg, ffprobe |
copy-exif |
Copy EXIF metadata (dates, GPS, camera info) from originals to converted images | exiftool |
| Command | Description | Dependencies |
|---|---|---|
find-hardlinks |
Search for files in a path and check if they have a hard link in a second path (inode-based) | find, ls |
nextcloud-upload |
Upload a file or folder to a Nextcloud public share via WebDAV | curl |
| Command | Description | Dependencies |
|---|---|---|
disk-health |
Check disk health using SMART data and alert if any issues are detected | smartctl |
- Create your script in
scripts/with the standard header:
#!/bin/bash
# @description Short description shown in the TUI
# @usage command-name <required_arg> [optional_arg]
# @example command-name /some/path value
# @deps comma, separated, dependencies- Register it in
tools.sh:
SCRIPTS=(
...
"your-script.sh|your-command"
)- Push to GitHub — it's immediately available on all machines.
Clone the repo and run tools from inside it — it will automatically prefer local files in ./scripts/ over the remote ones, so you can test changes without pushing first.
git clone https://github.com/thegabriele97/shtools
cd shtools
bash tools.shtools.sh is the single entry point. When invoked:
- with no arguments, it opens the fzf TUI
- with arguments, it runs the matching script directly
- with
--preview <name>, it prints script metadata (used internally by fzf)
Scripts are fetched from GitHub at runtime and executed in memory — nothing is written to disk permanently. When running from inside the cloned repo, local files take priority over remote ones.
