Um padrão de globalização de shell se expandirá para qualquer nome que corresponda a ele, independentemente de o nome ser de um arquivo ou diretório comum. Quando ls
recebe o nome de um diretório na linha de comando, ele listará seu conteúdo.
Parece que um ou vários dos nomes relatados por ls
para ls *rammar*
podem vir de um diretório cujo nome corresponda a esse padrão. Um desses arquivos é o último arquivo na saída ls
.
É por isso que, quando você tenta o segundo comando, o arquivo não pode ser encontrado. Não está disponível no diretório atual.
Resumo dos principais pontos dos comentários:
Eu sugeri que
find . -type f -name '*7eNA90*'
localizaria o arquivo, e também adicionou que era importante citar o padrão *7eNA90*
neste caso para que o shell não tente expandi-lo (ele é usado por find
).
@ higras tentou isso e funcionou, mas ele também descobriu que funcionava sem as aspas. Ele funciona sem as aspas, pois não há nada que corresponda ao padrão no diretório atual, portanto, o shell deixa o padrão não expandido.
No entanto, tornar um hábito depender desse comportamento é perigoso, pois, no caso geral, nem sempre é possível saber ou lembrar quais nomes estão, ou estarão disponíveis no diretório atual. Algumas shells também têm opções de shell para expandir padrões não correspondidos para a cadeia vazia, como a opção nullglob
shell em bash
. Definir essa opção de shell faria com que o comando falhasse se o padrão estivesse sem aspas.
É mais seguro simplesmente citar o padrão do que confiar nas circunstâncias.