O que é uma maneira simples de listar os subdiretórios imediatos de um determinado local?

1

Existe um comando embutido ou uma forma menos detalhada de alcançar isso?

find /var/foo -maxdepth 1 -mindepth 1 -type d

Ou eu deveria apenas fazer um pequeno script ou função de shell se eu estou fazendo esse tipo de coisa com frequência?

    
por Bribles 26.03.2010 / 22:34

2 respostas

1

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.

    
por 28.03.2010 / 23:23
3
ls -d */

"- d" significa não se aprofundar nos diretórios, o "* /" apenas corresponde aos diretórios.

    
por 26.03.2010 / 22:40