{ ... }: { 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 [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[@]} } ''; }