Se o seu sistema suporta o comando zsh , então no script bash você pode executar
zsh -c 'ls -lhS -- **/*(.D)'
Isso provavelmente requer alguma explicação:
-
zsh : diferente de bash , shell mais poderoso com muitos recursos
-
-c : toma o próximo argumento como um comando para executar por zsh
-
ls -lhS : de acordo com a sua pergunta, este é o comando que você deseja executar
-
-- : cuida de nomes de arquivos estranhos que podem começar com - character
-
** : glob correspondendo a vários directórios
-
* : standard glob - correspondendo todos os arquivos nesses diretórios
-
() : qualificadores glob especificando quais arquivos e em qual ordem devem ser selecionados
-
. : selecionamos apenas arquivos simples (equivalente a type f em find )
-
D : inclua arquivos de pontos (arquivos ocultos) no resultado
Depois de reler a pergunta, suponho que você queira excluir o caminho inteiro do resultado, não apenas a parte principal. Isso ainda pode ser feito com zsh :
print -l **/*(.OLDe:'reply=${REPLY##*/}':)
mas isso pode ser um pouco demais, já que isso não é questão sobre zsh truques, então vou propor uma solução "padrão" com find + sed :
find . -type f -exec sh -c 'ls -lhS "$@" | sed "s| \..*/| |"' {} \+