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| \..*/| |"' {} \+