
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 *
els */
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.
ls
listará 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 -d
desativa 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.