“ls” com padrão de um dígito me dá resultados estranhos

3

Estou executando o Ubuntu como VM no VMWare Fusion no MacPro:

ayakovlev@ubuntu:~$ uname -a
Linux ubuntu 3.11.10.3 #1 SMP Thu Mar 6 15:31:54 EST 2014 x86_64 x86_64 x86_64 GNU/Linux

O comando abaixo produz o resultado que eu espero:

ayakovlev@ubuntu:~$ ls /usr/include/*5*
ax25.h

Quando substituo 5 por 6 , obtenho resultados muito estranhos:

ayakovlev@ubuntu:~$ ls /usr/include/*6*
a.out.h  asm  bits  c++  fpu_control.h  gnu  ieee754.h  sys  zconf.h

O que pode ser um motivo para isso?

    
por HEKTO 24.03.2014 / 02:00

2 respostas

2

Como @Sparhawk explicou, o que está acontecendo é que você está listando o conteúdo dos diretórios. Isso não vai depender do * nix que você está usando, até onde eu sei, esse é o comportamento padrão do GNU ls . Implementações não-GNU podem ser diferentes, mas eu duvido.

Quando você executa este comando:

ls /usr/include/*6*

O glob ( *6* ) é expandido pelo seu shell (bash por exemplo) antes chamando ls . Então, dada a seguinte estrutura de diretório:

.
├── dir1
│   ├── file1
│   └── file2
└── dir2
    ├── file1
    └── file2

ls d* será expandido para ls dir1 dir2 e fornecerá os resultados esperados:

dir1:
file1  file2

dir2:
file1  file2

Por isso, ls lida com diretórios de destino vários por padrão, ele lista cada diretório encontrado e, em seguida, o conteúdo desse diretório. No entanto, se você executá-lo em um único diretório, o nome não será impresso:

$ ls d*1
file1  file2

Portanto, como há apenas uma correspondência para o glob *6* em /usr/include e essa correspondência é um diretório, você está executando ls com um único diretório como entrada e, portanto, está listando o conteúdo de o diretório sem incluir o nome do diretório.

    
por terdon 24.03.2014 / 04:03
6

Os curingas em ls /usr/include/*6* expandem para qualquer correspondência. No primeiro caso, ele correspondia a arquivos regulares específicos. No entanto, se ele corresponder a diretórios como /usr/include/x86_64-linux-gnu , o conteúdo desses diretórios será impresso (isto é, teria sido expandido para ls /usr/include/x86_64-linux-gnu ).

Você pode verificar se o curinga teria sido expandido para um diretório com ls /usr/include | grep 6 .

    
por Sparhawk 24.03.2014 / 02:11

Tags