id = "czkawka" name = "Czkawka" homepage = "https://github.com/qarmin/czkawka" description = "Multi functional app to find duplicates, empty folders, similar images etc." executables = ["czkawka_cli", "czkawka_gui", "krokiet"] [dotfiles] # Czkawka's own instructions document separate frontend configuration # directories for GTK/CLI and Krokiet on Linux, macOS, and Windows. Cache # directories are intentionally omitted because they are derived scan state: # https://github.com/qarmin/czkawka/blob/master/instructions/Instruction.md # https://github.com/qarmin/czkawka/blob/master/instructions/FAQ.md paths = [ "[configHome]/czkawka/", "[appData]/pl.Qarmin.Czkawka/", "%APPDATA%/Qarmin/Czkawka/config/", "[configHome]/krokiet/", "[appData]/pl.Qarmin.Krokiet/", "%APPDATA%/Qarmin/Krokiet/config/", ] secret = [] side_effect = false [commands] format = 1 label = "Czkawka CLI" description = "Scan directories with czkawka_cli. Modelled subcommands: dup (duplicate files) and empty-folders. Other tools (big, music, image, video, ...) are not covered. Short flags only, as listed in the clap source." quality = "ai-draft" parser = { end_of_options = "--", interleave = "permute", long_equals = true, short_attached = true, short_bundles = false } [[commands.subcommand]] path = ["dup"] label = "Find duplicate files" description = "Scan for duplicate files. Without -D nothing is deleted; -Q previews." [[commands.subcommand.source]] id = "src" kind = "manual" url = "https://github.com/qarmin/czkawka/blob/master/czkawka_cli/src/commands.rs" revision = "master 2026-10-27" evidence = """ czkawka dup -d /home/rafal -e /home/rafal/Obrazy -m 25 -x 7z rar IMAGE -s hash -f results.txt -D aeo -d Directory(ies) to search -e Excluded directory(ies) -x Allowed file extension(s) -m Minimum size in bytes -s Search method (NAME, SIZE, SIZE_NAME, HASH) -f Save results to formatted text file (file-name) -D Delete method (AEN, AEO, ON, OO, AEB, AES, OB, OS, HARD) -Q Dry run - preview operations -y Move items to trash -R Prevents recursive check of folders """ [[commands.subcommand.field]] id = "directories" label = "Directories to search" type = "path" option = ["-d"] multiple = true path = { kind = "directory", role = "input", must_exist = true } sources = ["src"] [[commands.subcommand.field]] id = "excluded" label = "Excluded directories" type = "path" option = ["-e"] multiple = true path = { kind = "directory", role = "input", must_exist = false } sources = ["src"] [[commands.subcommand.field]] id = "extensions" label = "Allowed extensions" description = "Extensions or macros such as IMAGE, TEXT, VIDEO, MUSIC." type = "string" option = ["-x"] multiple = true sources = ["src"] [[commands.subcommand.field]] id = "min_size" label = "Minimum size (bytes)" type = "integer" option = ["-m"] sources = ["src"] [[commands.subcommand.field]] id = "method" label = "Search method" type = "enum" option = ["-s"] choices = [{ value = "NAME", label = "Name" }, { value = "SIZE", label = "Size" }, { value = "SIZE_NAME", label = "Size and name" }, { value = "HASH", label = "Hash (slowest, exact)" }] sources = ["src"] [[commands.subcommand.field]] id = "save" label = "Save results to file" type = "path" option = ["-f"] path = { kind = "file", role = "output", must_exist = false } effect = "overwrite" sources = ["src"] [[commands.subcommand.field]] id = "delete_method" label = "Delete method" description = "Which files in each group get deleted. Leave unset to only report." type = "enum" option = ["-D"] choices = [{ value = "AEN", label = "All except newest" }, { value = "AEO", label = "All except oldest" }, { value = "ON", label = "Only newest" }, { value = "OO", label = "Only oldest" }, { value = "AEB", label = "All except biggest" }, { value = "AES", label = "All except smallest" }, { value = "OB", label = "Only biggest" }, { value = "OS", label = "Only smallest" }, { value = "HARD", label = "Replace with hard links" }] effect = "delete" sources = ["src"] [[commands.subcommand.field]] id = "dry_run" label = "Dry run" type = "boolean" option = ["-Q"] sources = ["src"] [[commands.subcommand.field]] id = "trash" label = "Move to trash instead of deleting" type = "boolean" option = ["-y"] sources = ["src"] [[commands.subcommand.field]] id = "not_recursive" label = "Do not recurse" type = "boolean" option = ["-R"] sources = ["src"] [[commands.subcommand.task]] id = "report" label = "Report duplicates" set = { method = ["HASH"] } fields = ["directories", "excluded", "extensions", "min_size", "method", "save"] required = ["directories"] [[commands.subcommand.task]] id = "preview-delete" label = "Preview deletion (dry run)" set = { dry_run = [true], delete_method = ["AEO"] } lock = ["dry_run"] fields = ["directories", "excluded", "extensions", "delete_method", "dry_run", "trash"] required = ["directories", "delete_method"] [[commands.subcommand.group]] id = "basic" label = "Basic" fields = ["directories", "excluded", "extensions", "method", "min_size", "save"] [[commands.subcommand.group]] id = "advanced" label = "Advanced" fields = ["delete_method", "dry_run", "trash", "not_recursive"] [[commands.subcommand]] path = ["empty-folders"] label = "Find empty folders" description = "Scan for empty folders; -D deletes them." [[commands.subcommand.source]] id = "src" kind = "manual" url = "https://github.com/qarmin/czkawka/blob/master/czkawka_cli/src/commands.rs" revision = "master 2026-10-27" evidence = """ czkawka empty-folders -d /home/rafal/rr /home/gateway -f results.txt -d Directory(ies) to search -e Excluded directory(ies) -f Save results to formatted text file (file-name) -D Delete found items -Q Dry run - preview operations -y Move items to trash """ [[commands.subcommand.field]] id = "directories" label = "Directories to search" type = "path" option = ["-d"] multiple = true path = { kind = "directory", role = "input", must_exist = true } sources = ["src"] [[commands.subcommand.field]] id = "excluded" label = "Excluded directories" type = "path" option = ["-e"] multiple = true path = { kind = "directory", role = "input", must_exist = false } sources = ["src"] [[commands.subcommand.field]] id = "save" label = "Save results to file" type = "path" option = ["-f"] path = { kind = "file", role = "output", must_exist = false } effect = "overwrite" sources = ["src"] [[commands.subcommand.field]] id = "delete" label = "Delete found folders" type = "boolean" option = ["-D"] effect = "delete" sources = ["src"] [[commands.subcommand.field]] id = "dry_run" label = "Dry run" type = "boolean" option = ["-Q"] sources = ["src"] [[commands.subcommand.field]] id = "trash" label = "Move to trash instead of deleting" type = "boolean" option = ["-y"] sources = ["src"] [[commands.subcommand.task]] id = "report" label = "List empty folders" fields = ["directories", "excluded", "save"] required = ["directories"] [[commands.subcommand.task]] id = "clean" label = "Delete empty folders (trash)" set = { delete = [true], trash = [true] } fields = ["directories", "excluded", "delete", "trash", "dry_run"] required = ["directories"] [[commands.subcommand.group]] id = "basic" label = "Basic" fields = ["directories", "excluded", "save"] [[commands.subcommand.group]] id = "advanced" label = "Advanced" fields = ["delete", "dry_run", "trash"]