Por que esse curinga não funciona da maneira esperada?

7

Na minha pasta de usuário, eu tenho pastas como D ropbox, D ocumentos, D downloads & amp; d ump.

ls a* deve listar todos os arquivos cujo nome começa com a . Certo? Mas quando eu dou o comando ls d* , em vez de apenas exibir dump , ele mostra o diretório ls dump. E quando eu der o comando como ls D* , então ele exibe ls de todas as dobras começando com D

Então, que parte eu senti falta em entendê-lo?

Editar: Anexando uma captura de tela

    
por Ashfame 10.02.2011 / 16:19

3 respostas

14

De acordo com a página man bash:

  

o bash verifica cada palavra para o   caracteres *,? e [. Se um dos   esses caracteres aparecem, então o   a palavra é considerada como um padrão, e   substituído por um classificado alfabeticamente   lista de nomes de arquivos correspondentes ao   padrão

e do nó de informações para ls

  

O programa 'ls' lista informações   sobre arquivos (de qualquer tipo, incluindo   diretórios). Opções e arquivo   argumentos podem ser misturados   arbitrariamente, como de costume.

     

Para linha de comando não opcional   argumentos que são diretórios, por   o padrão 'ls' lista o conteúdo de   diretórios, não recursivamente, e   omitindo arquivos com nomes começando   com '.'. Para outra não opção   argumentos, por padrão listas 'ls' apenas   o nome do arquivo. Se não houver opção   argumentos são especificados, listas 'ls'   o conteúdo do diretório atual.

Quando você der ls d* , d * será expandido para a lista classificada de todos os nomes de arquivos / diretórios começando com d. Então você comanda se torna

ls dump

e como dump é um nome de diretório, você obtém a listagem de todos os arquivos no diretório "dump ' mas quando você der ls D* , D * é expandido para " Documentos de Desktop Downloads Dropbox ", então o comando se torna

ls Desktop Documents Downloads Dropbox

e como todos esses são diretórios, você obtém a listagem de arquivos no diretório individual. Se houvesse um arquivo começando com D no diretório atual, ele teria sido listado separadamente.

    
por binW 10.02.2011 / 17:15
5

ls d * e D * listam arquivos e pastas correspondentes a d * e D * respectivamente, o comportamento é o mesmo, deve ter havido um erro em seu teste.

Se você deseja listar apenas os nomes das pastas e não o conteúdo das pastas, é necessário usar "-d":

ls -d D*
    
por João Pinto 10.02.2011 / 16:25
0

Como sugerido acima, a opção -d é um caminho a percorrer. Adicionando

alias ld='ls -d'

para o meu arquivo ~/.bashrc funciona bem para mim.

    
por user3179473 13.01.2016 / 16:26

Tags