find ou ls não lista todos os arquivos em uma pasta no MacOS (HFS +)

3
O comando

ls ou find parece não localizar todos os arquivos localizados em uma pasta específica. Estou executando um Mac (sob El Capitan 10.11.6 (15G21013), 500GB SSD, HFS +). Em uma das minhas pastas, onde tenho cerca de 700 mil arquivos, tenho um arquivo que posso abrir e ls ou find irá localizá-lo se eu especificar o nome do arquivo. No entanto, ls ou find aplicado na pasta não poderá encontrar o arquivo. Isso parece uma corrupção HFS +? Quais métodos ou ferramentas são recomendados para reparar tal problema, com o mínimo de tempo de inatividade e risco para o meu sistema de arquivos?

11:16:35 gyin@mymac:[~/]: ls dis/ASA.md
dis/ASA.md
11:19:06 gyin@mymac:[~/]: find dis/ASA.md
dis/ASA.md
11:19:40 gyin@mymac:[~/]: find dis | grep "ASA.md"
dis/CASA.md
dis/DASA.md
11:19:55 gyin@mymac:[~/]: ls dis | grep "ASA.md"
CASA.md
DASA.md
11:20:36 gyin@mymac:[~/]: find dis | wc -l
  717004

Atualização:

Seguindo a resposta de Kamil, não parece um problema Unicode.

13:28:12 gyin@mymac:[~]: find dis/ASA.md | xxd
00000000: 6469 732f 4153 412e 6d64 0a              dis/ASA.md.
13:28:25 gyin@mymac:[~]: echo dis/ASA.md | xxd
00000000: 6469 732f 4153 412e 6d64 0a              dis/ASA.md.
13:28:34 gyin@mymac:[~]:
    
por Gerard Yin 18.06.2018 / 12:13

1 resposta

1

Possível cenário:

Existe А do script cirílico e existe A do latim . Eles podem parecer iguais, mas são codificados de forma diferente.

Se o segundo "A" no nome do arquivo problemático não for latim, você pode ter digitado como

ls dis/AS

depois clique em tab e seu shell completou automaticamente o nome com o cirílico, você nem sabia a diferença. Você percebeu que ls funcionou.

Em seguida, você bateu em & uparrow; , fez uma edição em linha e transformou ls em find , sem tocar no caminho (ele ainda continha caracteres não latinos). Você percebeu find trabalhado.

Mas quando você digita grep , você digita ASA.md manualmente. É tudo latim, não há cirílico nele. Comandos não funcionam como você espera.

Não estou dizendo que é A , com certeza. Eu estou dizendo que um ou mais personagens podem não ser o que você pensa que eles são.

Para confirmar ou ignorar esse cenário, eu analisaria a saída hexadecimal do comando find que funciona :

find dis/ASА.md | xxd

e compare com este comando digitado manualmente :

echo dis/ASA.md | xxd

Observação: meu post usa o cirílico А em alguns lugares, portanto, não copie e cole sem pensar.

Por outro lado, seu código literal postado no corpo da pergunta parece usar dis/ASA.md de maneira coerente, somente em latim. Se foi copiado do terminal (não digitado independentemente), então minha hipótese provavelmente não se aplica ao seu caso particular.

    
por 18.06.2018 / 12:48