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 ls
será recebido será o nome do diretório que você deseja listar. Você pode fazer isso com o que quiser.
O shell apenas . sources
o |pipe
como 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 .svn
arquivos é tão simples quanto alterar a ls
linha para:
ls -t --color=always --hide="*svn" "%p"\n
Ou se você deseja ver as svn
extensões em todas as pastas, MAS ./svn
você 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 -s
e, se você se importa, -u
classificará por tempo de acesso em vez de tempo mod.