O comando mais curto parece ser
ls -d /var/foo/{*,.[^.]*,..[^.]*}/
Eu acredito que listará não-recursivamente todos os subdiretórios de /var/foo
, não importa o quão estupidamente chamados os diretórios sejam ou se caracteres não-ASCII estão envolvidos.
user@comp:~$ ls -1d /var/foo/{*,.[^.]*,..[^.]*}/
/var/foo/ . . . . . /
/var/foo/-d/
/var/foo/. . . . . ./
/var/foo/. d/
/var/foo/.-d/
/var/foo/..d/
/var/foo/.d/
/var/foo/.字_Ж/
/var/foo/d/
/var/foo/dir1/
/var/foo/dir2/
/var/foo/字/
No entanto, find /var/foo -maxdepth 1 -mindepth 1 -type d
é mais fácil de lembrar e digitar.
Abaixo está minha auto-resposta original.
Se alguém não se importa com arquivos que começam com um ponto, então a resposta do mibus '
ls -d /var/foo/*/
seria curto e eficaz. No entanto, se alguém quiser que os arquivos ocultos sejam incluídos, é necessário ficar com
find /var/foo -maxdepth 1 -mindepth 1 -type d
ou tente
ls -FA /var/foo | grep /
O -F coloca / e o fim dos nomes dos diretórios (assim como outros caracteres para outros tipos de arquivos). O -A faz com que os arquivos que começam com um ponto sejam incluídos, exceto para '.' e '..'. É por isso que -a não é usada. O grep não obterá nenhum falso positivo, pois '/' não é permitido em nomes de arquivos (pelo menos para sistemas de arquivos POSIX).
Em relação ao desempenho, na minha instalação do Ubuntu Jaunty com apenas 32k arquivos e diretórios em / var / foo, find é o mais rápido, seguido por ls -d, e ls -FA com grep vem em último lugar.