Você não pode ter dois arquivos com o mesmo nome no mesmo diretório. Os nomes de arquivos são, por definição, chaves exclusivas.
O que você tem é quase certamente um personagem especial. Eu sei que você verificou por eles, mas como exatamente? Você poderia dizer algo como ls *gff | hexdump -C
para descobrir onde estão os caracteres especiais. Qualquer byte com o conjunto de bits alto (isto é, valores hexadecimais entre 80
e FF
) será uma indicação de algo que deu errado. Qualquer coisa abaixo de 20
(decimal 32) também é um caractere especial. Outra dica é a presença de pontos .
na coluna de texto à direita de hexdump -C
.
Existem vários caracteres que se parecem com caracteres ASCII dos EUA em UTF-8. Mesmo em ASCII dos EUA, 1 e l podem ser parecidos. Então, você tem o C do cirílico (U + 0421), o Sigma Lunático grego (U + 03F9, também exatamente como um C), cirílico / grego minúscula 'o', etc. E esses são apenas os visíveis. Existem alguns caracteres Unicode invisíveis que podem estar lá.
Explicação: por que o bit alto significa algo que deu errado? O nome do arquivo "Clon1918K_PCC1.gff" parece ser 100% ASCII dos EUA de 7 bits. Colocá-lo em hexdump -C
produz isso:
00000000 43 6c 6f 6e 31 39 31 38 4b 5f 50 43 43 31 2e 67 |Clon1918K_PCC1.g|
00000010 66 66 |ff|
Todos esses valores de byte estão abaixo de 0x80
(8th bit clear) porque são todos pontos de código ASCII dos EUA de 7 bits. Os pontos de código Unicode U + 0000 a U + 007F representam os caracteres ASCII dos EUA de 7 bits tradicionais. Codepoints U + 0080 e acima representam outros caracteres e são codificados como dois a seis bytes em UTF-8 (no Linux, tente man utf8
para obter muitas informações sobre como isso é feito). Por definição, o UTF-8 codifica os pontos de código US-ASCII como eles próprios (isto é, o caractere hexadecimal ASCII 41
, Unicode U + 0041, é codificado como o byte único 41
). Codepoints ≥ 128 são codificados como dois a seis bytes, cada um dos quais tem o oitavo bit set . A presença de um caractere não-ASCII pode ser facilmente detectada por este sem ter que decodificar o fluxo . Por exemplo, digamos que eu substitua o terceiro caractere no nome do arquivo, "o" (ASCII 6f
, U + 006F) pelo caractere Unicode "U + 03FB GREY LETTER OMICRON", que é assim: "ο". hexdump -C
produz isso:
00000000 43 6c ce bf 6e 31 39 31 38 4b 5f 50 43 43 31 2e |Cl..n1918K_PCC1.|
00000010 67 66 66 |gff|
O terceiro caractere agora é codificado como a seqüência UTF-8 ce bf
, cada byte cujo oitavo bit é definido. E este é o seu sinal de problema neste caso. Além disso, observe como hexdump
, que decodifica apenas ASCII de 7 bits, não consegue decodificar o caractere único UTF-8 e mostra dois caracteres não imprimíveis ( ..
).