Existe uma maneira correta de listar os subdiretórios do diretório atual?

9

Eu posso encontrar os subdiretórios de um diretório por

ls -d -- */

ou

ls -l | grep "^d"

mas ambos parecem indiretos, e eu imaginaria que haveria uma maneira padrão de encontrar apenas os diretórios. Existe uma maneira correta de fazer isso? E se não, algum desses fatores levará a um comportamento indesejável nos casos de borda? (Links simbólicos, diretórios ocultos, etc.)

    
por Eric Wilson 17.06.2011 / 21:42

2 respostas

15

A resposta dependerá mais do que você pretende fazer com a saída do que do que você está procurando. Se você quiser apenas ver uma lista de referências visuais no terminal, sua primeira solução é realmente muito boa. Se você quiser processar a saída, considere usar outro método.

Uma das formas mais robustas de obter uma lista para alimentar outro programa é usar find .

find -maxdepth 1 -type d

O motivo de isso ser bom para os feeds é que find pode gerar os dados separados por nulos usando -print0 ou adequadamente as cadeias de escape como argumentos para outros programas usando -exec . Para referência sobre por que isso é melhor do que analisar a saída de ls, consulte ParsingLS no Wiki de Greg.

    
por 17.06.2011 / 21:44
4

FYI - No ZSH (mas não no BASH), você também pode fazer isso: ls -d -- *(/) ; o modificador (/) diz ZSH apenas para diretórios glob.

Dito isto, não é muito diferente da sua própria solução proposta ( ls -d -- */ ) e está longe de ser padrão.

Em relação à saída de ls (que provavelmente difere com base em outras flags):

% ls
dir0 dir1 dir2 file0 file1 file2
% ls -d -- */
dir0/ dir1/ dir2/
% ls -d -- *(/)
dir0 dir1 dir2
    
por 18.06.2011 / 19:11