{
  "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": {
    "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
    },
    "subcommand": [
      {
        "path": [
          "dup"
        ],
        "label": "Find duplicate files",
        "description": "Scan for duplicate files. Without -D nothing is deleted; -Q previews.",
        "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\n-d  Directory(ies) to search\n-e  Excluded directory(ies)\n-x  Allowed file extension(s)\n-m  Minimum size in bytes\n-s  Search method (NAME, SIZE, SIZE_NAME, HASH)\n-f  Save results to formatted text file (file-name)\n-D  Delete method (AEN, AEO, ON, OO, AEB, AES, OB, OS, HARD)\n-Q  Dry run - preview operations\n-y  Move items to trash\n-R  Prevents recursive check of folders\n"
          }
        ],
        "field": [
          {
            "id": "directories",
            "label": "Directories to search",
            "type": "path",
            "option": [
              "-d"
            ],
            "multiple": true,
            "path": {
              "kind": "directory",
              "role": "input",
              "must_exist": true
            },
            "sources": [
              "src"
            ]
          },
          {
            "id": "excluded",
            "label": "Excluded directories",
            "type": "path",
            "option": [
              "-e"
            ],
            "multiple": true,
            "path": {
              "kind": "directory",
              "role": "input",
              "must_exist": false
            },
            "sources": [
              "src"
            ]
          },
          {
            "id": "extensions",
            "label": "Allowed extensions",
            "description": "Extensions or macros such as IMAGE, TEXT, VIDEO, MUSIC.",
            "type": "string",
            "option": [
              "-x"
            ],
            "multiple": true,
            "sources": [
              "src"
            ]
          },
          {
            "id": "min_size",
            "label": "Minimum size (bytes)",
            "type": "integer",
            "option": [
              "-m"
            ],
            "sources": [
              "src"
            ]
          },
          {
            "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"
            ]
          },
          {
            "id": "save",
            "label": "Save results to file",
            "type": "path",
            "option": [
              "-f"
            ],
            "path": {
              "kind": "file",
              "role": "output",
              "must_exist": false
            },
            "effect": "overwrite",
            "sources": [
              "src"
            ]
          },
          {
            "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"
            ]
          },
          {
            "id": "dry_run",
            "label": "Dry run",
            "type": "boolean",
            "option": [
              "-Q"
            ],
            "sources": [
              "src"
            ]
          },
          {
            "id": "trash",
            "label": "Move to trash instead of deleting",
            "type": "boolean",
            "option": [
              "-y"
            ],
            "sources": [
              "src"
            ]
          },
          {
            "id": "not_recursive",
            "label": "Do not recurse",
            "type": "boolean",
            "option": [
              "-R"
            ],
            "sources": [
              "src"
            ]
          }
        ],
        "task": [
          {
            "id": "report",
            "label": "Report duplicates",
            "set": {
              "method": [
                "HASH"
              ]
            },
            "fields": [
              "directories",
              "excluded",
              "extensions",
              "min_size",
              "method",
              "save"
            ],
            "required": [
              "directories"
            ]
          },
          {
            "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"
            ]
          }
        ],
        "group": [
          {
            "id": "basic",
            "label": "Basic",
            "fields": [
              "directories",
              "excluded",
              "extensions",
              "method",
              "min_size",
              "save"
            ]
          },
          {
            "id": "advanced",
            "label": "Advanced",
            "fields": [
              "delete_method",
              "dry_run",
              "trash",
              "not_recursive"
            ]
          }
        ]
      },
      {
        "path": [
          "empty-folders"
        ],
        "label": "Find empty folders",
        "description": "Scan for empty folders; -D deletes them.",
        "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\n-d  Directory(ies) to search\n-e  Excluded directory(ies)\n-f  Save results to formatted text file (file-name)\n-D  Delete found items\n-Q  Dry run - preview operations\n-y  Move items to trash\n"
          }
        ],
        "field": [
          {
            "id": "directories",
            "label": "Directories to search",
            "type": "path",
            "option": [
              "-d"
            ],
            "multiple": true,
            "path": {
              "kind": "directory",
              "role": "input",
              "must_exist": true
            },
            "sources": [
              "src"
            ]
          },
          {
            "id": "excluded",
            "label": "Excluded directories",
            "type": "path",
            "option": [
              "-e"
            ],
            "multiple": true,
            "path": {
              "kind": "directory",
              "role": "input",
              "must_exist": false
            },
            "sources": [
              "src"
            ]
          },
          {
            "id": "save",
            "label": "Save results to file",
            "type": "path",
            "option": [
              "-f"
            ],
            "path": {
              "kind": "file",
              "role": "output",
              "must_exist": false
            },
            "effect": "overwrite",
            "sources": [
              "src"
            ]
          },
          {
            "id": "delete",
            "label": "Delete found folders",
            "type": "boolean",
            "option": [
              "-D"
            ],
            "effect": "delete",
            "sources": [
              "src"
            ]
          },
          {
            "id": "dry_run",
            "label": "Dry run",
            "type": "boolean",
            "option": [
              "-Q"
            ],
            "sources": [
              "src"
            ]
          },
          {
            "id": "trash",
            "label": "Move to trash instead of deleting",
            "type": "boolean",
            "option": [
              "-y"
            ],
            "sources": [
              "src"
            ]
          }
        ],
        "task": [
          {
            "id": "report",
            "label": "List empty folders",
            "fields": [
              "directories",
              "excluded",
              "save"
            ],
            "required": [
              "directories"
            ]
          },
          {
            "id": "clean",
            "label": "Delete empty folders (trash)",
            "set": {
              "delete": [
                true
              ],
              "trash": [
                true
              ]
            },
            "fields": [
              "directories",
              "excluded",
              "delete",
              "trash",
              "dry_run"
            ],
            "required": [
              "directories"
            ]
          }
        ],
        "group": [
          {
            "id": "basic",
            "label": "Basic",
            "fields": [
              "directories",
              "excluded",
              "save"
            ]
          },
          {
            "id": "advanced",
            "label": "Advanced",
            "fields": [
              "delete",
              "dry_run",
              "trash"
            ]
          }
        ]
      }
    ]
  }
}
