Por que “ls. *” mostra o conteúdo de diretórios ocultos?

0

Por que ls .* imprime o conteúdo dos diretórios ocultos? Eu quero imprimir apenas os arquivos ocultos e agora ver que Mostrar apenas arquivos ocultos é uma solução para isso, mas ainda quero entender por que o conteúdo dos diretórios é mostrado. O conteúdo de outros diretórios aninhados não é mostrado.

Abaixo está uma saída parcial de ls .* em meu diretório pessoal.

.bash_history
.bash_profile
.bashrc
.coin_history
.emacs
.gitconfig
.gitignore_global
.grasp_jss

.ssh:
config          github_rsa.pub  id_rsa.pub      known_hosts.old
github_rsa      id_rsa          known_hosts     lambda.pem

.vim:
colors   ftdetect syntax

Esta máquina está executando o RHEL. Comportamento semelhante observado no Mac OSX.

    
por agotsis 02.01.2017 / 19:43

4 respostas

4

Resposta curta: expansão glob glob.

O shell recebe sua entrada e expande a parte .* antes de passá-la para ls , então você está fazendo com eficiência:

$ ls .bash_history .bash_profile .bashrc .coin_history .emacs ...

Por isso, lista cada entrada. Quando ele vê uma entrada de diretório, lista o conteúdo desse diretório, exatamente como você esperaria que o ls fizesse. Para ver apenas os arquivos / diretórios em seu diretório de trabalho, use a opção -d para ls :

$ ls -d .*

A opção -d informa ls para "listar os próprios diretórios, não seus conteúdos" (tirada da página ls man).

    
por 02.01.2017 / 19:56
3

Why does ls .* print out the contents of the hidden directories?

Quando ls recebe um diretório, ele imprime o conteúdo desse diretório (por padrão, excluindo os arquivos ocultos nesse diretório). Com ls .* , o shell forneceu ls uma lista de arquivos e diretórios que começam com .

Você pode usar set -x para ver o comando sendo chamado pelo shell (ou seja, após expandir os shell globs).

    
por 02.01.2017 / 19:56
2

Quando você faz

$ ls directory

você receberá a listagem de directory . Se directory for um diretório, o conteúdo dele será listado, caso contrário, ele será listado como qualquer outro arquivo.

Quando você faz

$ ls dir*

você receberá uma listagem de todas as coisas que correspondem a dir* . Se alguma dessas coisas forem diretórios, você verá o conteúdo desses diretórios.

Quando você faz

$ ls .*

você obterá o mesmo efeito do exemplo anterior, somente o padrão será diferente e, como você corresponde explicitamente arquivos e pastas ocultos, esses (os correspondentes) serão considerados por ls .

Use ls com seu sinal -d se você não estiver interessado em ver o conteúdo de uma pasta (oculta ou não). Ele impede que ls recorra a qualquer pasta encontrada que corresponda ao padrão fornecido por você.

    
por 02.01.2017 / 19:58
1

Porque você diz especificamente. No caso de a parte de expansão glob globular ser óbvia para você, acho que a resposta que você realmente precisava considerava a confusão por trás da sua pergunta.

Você está confundindo o que você dá com o que eu te dou. Enquanto o ls não lhe der diretórios / arquivos ocultos, você pode dar diretórios / arquivos ocultos para listar. O que você fez usando .* especificamente (a ênfase está em . não em * ).

    
por 02.01.2017 / 20:33

Tags