find $DIR -depth -maxdepth 3 \
-type d -readable -printf \
'printf "\\n%p\\n"
ls -t --color=always "%p"\n' |\
. /dev/stdin 2>&-
Isso evita qualquer problema na lista de argumentos, porque o único argumento que lsserá recebido será o nome do diretório que você deseja listar. Você pode fazer isso com o que quiser.
O shell apenas . sourceso |pipecomo um script shell - é o mesmo processo e não tem os problemas que você pode encontrar quando execveé chamado.
Em todo o caso - o acima exposto apenas atinge três níveis de profundidade, que é ajustável alterando maxdepth. Também é profundo primeiro - para que você trabalhe de volta para o diretório atual a partir de depth.
Você pode notar que também recebe $LSCOLORS- na minha máquina, ele também fornece colunas bem impressas e tudo o mais que você deseja ls- ou, nesse caso, qualquer coisa que você possa imaginar que gostaria de fazer com. source.
SEM SVN
Novamente, isso fará o que você espera ls. Portanto, ocultar .svnarquivos é tão simples quanto alterar a lslinha para:
ls -t --color=always --hide="*svn" "%p"\n
Ou se você deseja ver as svnextensões em todas as pastas, MAS ./svnvocê pode alterá-las para que todo o comando fique assim:
find $DIR -depth -maxdepth 3 \
-type d -readable -printf \
'printf "\\n%p\\n" ; hide=
[ "%p" = "./svn" ] && hide="*svn"
ls -t --color=always --hide="$hide" "%p"\n' |\
. /dev/stdin 2>&-
Pessoalmente, gosto de sl -se, se você se importa, -uclassificará por tempo de acesso em vez de tempo mod.