Diferença entre `ls -d */` e `ls -d *`?

Diferença entre `ls -d */` e `ls -d *`?

Estou lutando para entender como ls -d funciona. Eu li as outras perguntas do ls -d, mas nenhuma delas pergunta por que ls -d *não funciona da mesma maneira que ls -d */. Por que o caractere separador no final é tão importante?

ls *e ls */me comportar da mesma maneira, então eu esperava ls -d *trabalhar ls -d */da mesma maneira também.

Em vez disso, ls -d *lista todos os arquivos no diretório atual da mesma forma que faz ls, enquanto ls -d */lista o diretório no diretório atual. Porque isto é assim?

Responder1

ls *e ls */se comportar da mesma maneira.

Não, eles não querem. Se você tiver arquivos em seu diretório de trabalho, eles serão listados no primeiro comando, mas não no segundo.

lslistará os arquivos e diretórios (incluindo seu conteúdo) passados ​​na linha de comando. Se você usar shell globbing, seu shell substituirá opadrões"com uma lista de nomes de arquivos classificados em ordem alfabética" (cf.Expansão de nome de arquivo).

O padrão *corresponderá a todos os arquivos e diretórios no diretório atual (excluindo arquivos ocultos começando com .), enquanto */corresponderá apenas aos diretórios (excluindo diretórios ocultos).

A opção -ddesativa a listagem de conteúdo dos diretórios, mas os arquivos passados ​​para ls ainda serão listados.

Responder2

A resposta é: o final /força ls a olhar apenas os diretórios.

Observe que o comportamento é consistente (com e sem -d).

Um pequeno teste:

mkdir /tmp/test
touch /tmp/test/a
mkdir /tmp/test/b
touch /tmp/test/b/c
cd /tmp/test

E então faça ls *e ls */você notará a diferença.

informação relacionada