{ ... }:
{
  text = ''
    # Group files by extension.
    # Usage: group_ext [FILES]
    function group_ext() {
      local IFS=$'\n'
      local targets=(''${@})
      [[ "''${targets}" = "" ]] && targets=($(_ls_file))

      process() {
        local ext=''${target##*.}
        [[ -d "''${target}" ]] && { _iterate_skip "Is a directory."; return 0; }
        [[ "''${ext}" = "''${target}" ]] && { _iterate_skip "No extension."; return 0; }

        mkdir ''${ext} 2> /dev/null

        mv -- ''${target} ./''${ext}/''${target}
      }

      _iterate_targets process ''${targets[@]}
    }

    # Group files and dirs by year.
    # Usage: group_year [FILES]
    function group_year() {
      local IFS=$'\n'
      local targets=(''${@})
      [[ "''${targets}" = "" ]] && targets=($(ls))

      process() {
        local year=$(stat --format=%y ''${target})
        year=''${year%%-*}

        mkdir ''${year} 2> /dev/null

        mv -- ''${target} ./''${year}/''${target}
      }

      _iterate_targets process ''${targets[@]}
    }

    # Copy files from current year to the named dir.
    # Usage: group_year_copy <YEAR> [FILES]
    function group_year_copy() {
      local IFS=$'\n'
      local selected_year="''${1}"
      local targets=(''${@:2})

      if [[ "''${selected_year}" = "" ]]; then
        help group_year_copy
        return 2
      fi

      # All files by default.
      [[ "''${targets}" = "" ]] && targets=($(ls))

      mkdir ''${selected_year} 2> /dev/null

      process() {
        local year=$(stat --format=%y ''${target})
        year=''${year%%-*}

        if [[ "''${year}" = "''${selected_year}" ]]; then
          rcp -- ''${target} ./''${selected_year}/
        else
          _iterate_skip "Skip: ''${year}"
        fi
      }

      _iterate_targets process ''${targets[@]}
    }
  '';
}