forked from gnosisTux/DjinnOrganizer
Automatically organize downloads by moving or deleting files based on simple TOML rules.
| config.toml | ||
| djinnorganizer.pl | ||
| README.MD | ||
DjinnOrganizer
Automatically organize your downloads by moving or deleting files based on rules.
Installation
# Copy script to local bin
cp djinnorganizer.pl ~/.local/bin/djinnorganizer
chmod +x ~/.local/bin/djinnorganizer
# Create config folder
mkdir -p ~/.config/djinnorganizer
# Copy example config
cp config.toml ~/.config/djinnorganizer/config.toml
Usage
perl djinnorganizer.pl [options]
Options
--config_file <path>: TOML configuration file (default:~/.config/djinnorganizer/config.toml)--help,-h: Show this help message
Configuration (config.toml)
Example:
# Images → move to Pictures/Downloads
[[sorting]]
search = ["~/Downloads"]
extensions = [".jpeg", ".jpg", ".png"]
destination = "~/Pictures/Downloads"
ignore_hidden = true
# Videos → move to Videos/Downloads
[[sorting]]
search = ["~/Downloads"]
extensions = [".mp4", ".mkv"]
destination = "~/Videos/Downloads"
ignore_hidden = true
# ISOs → move to ~/ISOS, wait for files to finish downloading
[[sorting]]
search = ["~/Downloads"]
extensions = [".img", ".iso"]
destination = "~/ISOS"
ignore_hidden = true
wait_for_stable = true
# Delete everything else except .part files
[[sorting]]
search = ["~/Downloads"]
all = true
ignore_extensions = [".part"]
delete = true
ignore_hidden = true
wait_for_stable = true
# Books & documents → multiple source folders
[[sorting]]
search = [
"~/Downloads",
"~/Downloads/Telegram Desktop"
]
extensions = [
".pdf", ".epub", ".mobi", ".azw", ".azw3", ".djvu",
".cbz", ".cbr", ".txt", ".doc", ".docx", ".odt",
".rtf", ".html", ".xhtml", ".ppt", ".pptx"
]
destination = "~/Documents/Libros y Documentos/DjinnOrganizer"
ignore_hidden = true
# Delete everything else except .part files
[[sorting]]
search = ["~/Downloads"]
all = true
ignore_extensions = [".part"]
delete = true
ignore_hidden = true
wait_for_stable = true
DjinnOrganizer does its job sequentially. So the last option should be delete everything.
Parameters
search: folder or list of folders to scan (~ = home)extensions: process only these extensionsdestination: folder to move files to (ignored ifdelete: true)delete: remove files instead of movingignore_hidden: skip files starting with.wait_for_stable: wait a few seconds to ensure file is fully downloadedall: process all files instead of onlyextensionsignore_extensions: extensions to skip whenall=true
Notes
- Hidden files are ignored by default.
destinationis ignored ifdeleteis true.wait_for_stableensures incomplete downloads are skipped.searchnow supports multiple source folders in a single rule.