$ 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.