$ find . -name *.jpg -exec bash -c 'd=${1%/*}; d=${d##*/}; printf "%s %s\n" "$1" "$d"' Out {} \;
./halva/foo/bar/1/something.jpg 1
./halva/foo/bar/2/another.jpg 2
./halva/foo/bar/2/anotheranother.jpg 2
Para cada arquivo encontrado por find , executamos o script bash d=${1%/*}; d=${d##*/}; printf "%s %s\n" "$1" "$d" , em que o primeiro argumento, $1 , é o nome do arquivo.
Usamos remoção de sufixo , d=${1%/*} , para obter o nome do diretório do nome completo do arquivo. Em seguida, usamos remoção de prefixo , d=${d##*/} , para remover todos, exceto o nome do último diretório de d . Por fim, printf é usado para imprimir a saída.
A string Out no comando acima não é usada, a menos que haja um erro no comando bash, caso em que ela funcione como o nome do comando efetivo, $0 .
Salvando a saída em um arquivo
Para salvar a saída em um arquivo, usamos redirecionamento :
find . -name *.jpg -exec bash -c 'd=${1%/*}; d=${d##*/}; printf "%s %s\n" "$1" "$d"' Out {} \; >SchoolProject.txt
O símbolo > redireciona o stdout para o nome do arquivo que o segue.