Confuso sobre o comportamento do asterisco no comando ls

1

No Centos e Debian eu tentei isso.

O * com o comando ls implica pesquisa recursiva?

Se eu começar a digitar um nome de dir e clicar em tab eu vejo isso:

# ls /etc/rc<tab>
rc0.d/    rc1.d/    rc2.d/    rc3.d/    rc4.d/    rc5.d/    rc6.d/    rc.local  rcS.d/

Eu pensei que se eu colocasse um asterisco no caminho, eu veria a mesma coisa, mas em vez disso ele fez uma pesquisa recursiva:

# ls /etc/rc*
/etc/rc.local

/etc/rc0.d:
K50netconsole  K90network

/etc/rc1.d:
K50netconsole  K90network

/etc/rc2.d:
K50netconsole  S10network

/etc/rc3.d:
K50netconsole  S10network
...

O comando windows dir apenas me mostraria os diretórios correspondentes a / etc / rc * como posso obter esse comportamento de ls (sem usar a tecla tab)?

**** Editar / atualizar:

OK, então agora eu entendo * é interpretado pelo bash ao invés do comando, mas é sempre interpretado como "enumerar entradas de arquivo e pasta" ou se eu usá-lo em um contexto diferente ele faz outra coisa e se é assim como alguma declaração if grande no bash que diz "se * usado com caminhos do sistema de arquivos retorna nomes de arquivos e pastas, se * usado com rpm (como rpm -qa post * ) retorna nomes de pacotes, etc"

    
por user1028270 14.02.2016 / 19:07

2 respostas

4

O asterisco se expande antes de chegar ao comando ls , então isso é equivalente a

ls /etc/rc0.d    /etc/rc1.d   /etc/rc2.d    /etc/rc3.d    /etc/rc4.d ...

que listará o conteúdo de cada diretório separadamente.

Você pode querer usar ls -d /etc/rc* para suprimir listar os arquivos dentro dos diretórios ou usar um comando que apenas exiba a expansão, como echo /etc/rc* .

    
por 14.02.2016 / 19:13
0

Por padrão, se você invocar ls com um argumento de diretório, ele exibe o conteúdo do diretório. Você pode alterar esse comportamento com a opção -d . De man ls

-d, --directory
       list  directory entries instead of contents, and do not derefer‐
       ence symbolic links
    
por 14.02.2016 / 19:13

Tags