#!/bin/bash depth=0 declare -a last function node { local item dir i=0 ((depth++)) pushd "$1" >/dev/null set -- * last[$depth]='' for item do ((i++)) [ "$i" -eq $# ] && last[depth]=X for ((dir=1; dir/dev/null unset last[depth] ((depth--)) } shopt -s nullglob for item do printf "%s\n" "$item" node "$item" done