#!/bin/bash ############################################################################### # Author: Nils Gersnter # # Date: 2023-04-14 # # # # DESCRIPTION # # # # This script creates an interface to select a project folder. # # It sorts the folders in the order, last selected. # # # # SETUP # # # # Put the script in your ${HOME}/bin folder and add the following alias to # # your .bashrc (with the allias of your choice) # # alias fp='cd "$(findProject.sh)"' # # # # DEPENDENCIES # # # # This script depends on fzf and sponge being installed on the system. # # On debian like systems, sponge can be obtained by installing the moreutils # # package. # # fzf can be installed in the ways described here: # # https://github.com/junegunn/fzf#installation # ############################################################################### # The number of selections that is to be kept LINES_TO_SAVE=200 SELECTED_FOLDERS_LOG=${HOME}/.local/share/findProject_selection.log # Root folder per customer that contains project folders CUSTOMER_ROOT_FOLDERS="${HOME}/Documents/Code/BOLIDEN ${HOME}/Documents/Code/GERSTNER ${HOME}/Documents/Code/REPLYTO ${HOME}/Documents/Code/RISE ${HOME}/Documents/Code/VOLVOCARS" _get_root() { if [ -f ${SELECTED_FOLDERS_LOG} ] && [ $( wc -l ${SELECTED_FOLDERS_LOG} | grep -oe "^[0-9]\+") -gt 0 ]; then tac $SELECTED_FOLDERS_LOG | grep -oe "^\S\+" fi echo -e "${CUSTOMER_ROOT_FOLDERS}" } _get_subfolder() { if [ -f ${SELECTED_FOLDERS_LOG} ] && [ $( wc -l ${SELECTED_FOLDERS_LOG} | grep -oe "^[0-9]\+") -gt 0 ]; then tac $SELECTED_FOLDERS_LOG | grep -e "^${root_dir} \S\+" | grep -oe "\S\+$" fi find "$root_dir" -mindepth 1 -maxdepth 1 -type d -printf "%Ts\t%f\n" | sort -rn| cut -f 2 } _select_uniq() { local root="$1" cat < /dev/stdin | awk '!x[$0]++' - | fzf --preview "tree -L 1 ${root}{}" } root_dir="$(_get_root | _select_uniq)" base_name="$(_get_subfolder | _select_uniq "${root_dir}/")" echo "${root_dir}/${base_name}" echo "${root_dir} ${base_name}" >> "$SELECTED_FOLDERS_LOG" tail -n $LINES_TO_SAVE "$SELECTED_FOLDERS_LOG"| sponge "$SELECTED_FOLDERS_LOG"