#!/bin/bash shopt -s nullglob globstar typeit=0 if [[ $1 == "--type" ]]; then typeit=1 shift fi STARTDIR=$(pwd) BASEDIR="" DONE=0 SELECTION="$STARTDIR" while [ "$DONE" -eq 0 ] ; do dir_content=() images="$(find "$STARTDIR" -maxdepth 1 -type f -iregex '.*\(jpg\|jpeg\|png\|gif\|webp\)' -printf "%f\n")" folders="$(find "$STARTDIR" -maxdepth 1 -not -path '*/.*' -not -path '*/__*' -type d,l -printf "%f\n" | tail -n +2 )" # exclude basedir if [ -n "$images" ]; then dir_content=( "$images" ) fi if [ -n "$folders" ]; then dir_content=( "$folders" "${dir_content[@]}" ) fi dir_content=(".." "./" "${dir_content[@]}") entry=$(printf '%s\n' "${dir_content[@]}" | dmenu -i -p "Select a directory or files:" "$@" -l 15) if [ -z "$entry" ] ; then DONE=1 exit fi if [ "$entry" = "./" ]; then DONE=1 elif [ "$entry" != ".." ] ; then SELECTION="$SELECTION/$entry" # check if another dir if [ -d "$STARTDIR/$entry" ] ; then STARTDIR="$STARTDIR/$entry" else # not a directory so it must be a real password entry DONE=1 fi #chose to go up one dir else STARTDIR="${STARTDIR%/*}" SELECTION="$STARTDIR" fi done echo $SELECTION