com zsh
:
for d (*(/N)) {for f ($d/*(N:t)) printf '%s: %s\n' $d $f; echo}
Agora, se você não se importar em classificar ou excluir arquivos ocultos ou ter uma linha em branco entre os diretórios, (supondo que os nomes de arquivo não contenham caracteres de nova linha), você poderia simplesmente fazer:
find . -path './*/*' -prune -print | sed 's|\./||;s|/|: |'
Com o GNU find
, você também pode fazer:
find . -path './*/*' -prune -printf '%P\n' | sed 's|/|: |'
Ou:
find . -path './*/*' -prune -printf '%h: %f\n'
se você não se importa com o líder ./
.
O -path './*/*' -prune
é para relatar somente arquivos na profundidade 2 ( ./a/b
, mas não ./a
ou ./a/b/c
). Com a implementação do find
do GNU (e alguns outros), você pode substituí-lo por -mindepth 2 -maxdepth 2
.