Qual é o significado de ls -d?

3

Eu entrei na página man de ls, a entrada para a opção -d é a seguinte:

-d, --directory list directory entries instead of contents, and do not derefer‐ ence symbolic links

Então, eu pensei que ls -d mostrará todos os diretórios dentro de um determinado diretório. No entanto eu entrei em um diretório e tentei dois comandos diferentes:

  1. Obtendo diretórios com: ls -l | grep ^ d
    Este trabalhou, todos os 7 diretórios sendo exibidos

  2. Obtendo diretórios com ls -d Isso não exibe os 7 diretórios, apenas um ponto "."

Eu não entendo se estou usando a opção incorretamente ou se estou entendendo mal o seu significado, qual é o significado real e uso para a opção -d?

    
por Abdul Al Hazred 24.02.2015 / 00:04

4 respostas

6

ls -d mostra informações sobre um diretório ou link simbólico - com esta informação sendo (em termos simples) seu respectivo caminho. A suposição lógica é que o d significa diretório , já que a definição mais básica na terminologia do UNIX que eu já vi é 'listas de diretórios'.

Isso pode parecer superficialmente não ser tão útil; digamos que você reside atualmente em um diretório com 2 subdiretórios:

documents music

Usar ls documents sem opções forneceria uma listagem do conteúdo de documentos , conforme indicado corretamente acima. Usar ls -d documents simplesmente imprimirá o nome - já que o caminho para essa pasta, em relação ao local onde você reside atualmente - é o mesmo que o nome - documentos ! Isso pode ser expandido (embora um pouco redundante em seu uso básico) para ls -d $PWD/* , que exibirá todos os arquivos e pastas, mas com seus diretórios de trabalho (daí o PWD - diretórios de trabalho anteriores).

Ele tem uma função útil quando combinado com o operador * - ls -d */ exibirá APENAS os diretórios de dentro do seu diretório de trabalho atual.

Girando o foco para a parte link simbólico da definição, se você usasse ls -d ~ - uma expansão de til - ele imprimiria o caminho do diretório HOME atual. Isso pode ser usado com aplicativos variados (dependendo do sistema operacional) e tem algum uso prático; você poderia modificar sua instrução ainda mais para ls -d ~your-username , ls -d ~another-username ou ls -d ~root e receber o caminho HOME para esses usuários. Um outro exemplo disso pode ser visto no ambiente do servidor apache, com o uso de um nome de usuário aqui, similarmente exibindo o caminho para seu espaço de hospedagem (seu diretório HOME, relativamente falando).

Existem várias funções que podem ser usadas em combinação com isso, mas o que foi mencionado acima cobre a função principal por trás do operador - em resumo, -d é um operador para exibir especificamente informações de diretório / caminho. Existe um bom gerador de código para jogar com a função ls (incluindo alguma funcionalidade -d) se você quiser investigar mais: ls gerador de código .

    
por 24.02.2015 / 04:25
5

Não tenho certeza sobre a terminologia, mas ls -d apenas lista informações sobre o que se segue e nada mais, ou seja, ele não expande listas de diretórios, então:

ls -ld /usr/bin

apenas fornecerá uma linha de saída sobre o / usr / bin.

e

ls -ld *

apenas fornecerá informações sobre cada arquivo ou diretório no pwd, mas também não expandirá nenhum dos diretórios para listar seu conteúdo.

Como já mencionado, você pode usar find para listar diretórios, e ainda usar o ls -d se quiser:

find /usr/bin -type d -exec ls -ld {} \;

é para encontrar todos os diretórios em / usr / bin, caso não esteja claro.

    
por 24.02.2015 / 00:53
3

ls por si só, sem opções ou qualquer coisa, "listará o diretório atual". Por padrão, "listar um diretório" refere-se aos arquivos contidos nele.

O sinalizador -d altera ls para não listar os arquivos dentro do diretório especificado, mas para listar as informações sobre o próprio diretório. Não é, como você erroneamente pensou, referindo-se a "diretórios no diretório atual". Refere-se apenas ao "diretório atual".

É por isso que ls -d retorna apenas . .

    
por 24.02.2015 / 04:26
0

ls -d é o mesmo que ls -d . Antes de executar o comando ls , o bash shell expandirá quaisquer curingas. A opção -d instrui ls para listar apenas as informações sobre o argumento passado e não seu conteúdo, independentemente do argumento ser um diretório ou arquivo.

Para mais explicações, veja o exemplo de ls .* ; a expectativa é que liste todos os arquivos e diretórios que tenham . como o prefixo. Mas, quando o bash expande o curinga * , ele também inclui . e .. . Você pode verificar a saída da expansão bash verificando a saída do comando echo .* . Para cada argumento ls .* recebido após o bash ter expandido o * (que inclui . e .. ), ele listará o conteúdo se o argumento for um diretório. O resultado é alguma saída que não é o que você esperava.

Se você usar ls -d .* , a opção '-d' instrui a listar detalhes de apenas o argumento e não seu conteúdo, mesmo que seja um diretório. Agora isso te dá a saída que você esperava.

    
por 17.12.2017 / 00:17