Como manipular arquivos acentuados no Unix?

2

Em nosso CMS que passou por muitas versões e plataformas de hospedagem, acabamos de encontrar um arquivo de imagem acentuado que não funcionaria no seu URL. Então eu ssh'd na caixa e tentei mudar o nome.

No entanto, não consegui descobrir como digitar corretamente o nome dele. Por exemplo, eu sei que se um arquivo é chamado de my file.txt , você faria algo como mv my\ file.txt my_new_file.txt , mas como mover um arquivo chamado café.txt ?

No final, usei um caractere curinga e usei mv caf*.txt cafe.txt , mas ainda estou me perguntando por que essa imagem acentuada não funcionaria, e qual teria sido a maneira correta de lidar com ela no UNIX.

    
por Damien Varron 07.05.2012 / 11:08

2 respostas

5

Usando o bash:

Só para ver meus arquivos:

$ ls
café.txt

Verifique os bytes hexadecimais do nome do arquivo (note: o meu pode ser diferente ... o meu provavelmente está codificado em UTF-8):

$ echo * | hexdump -C
00000000  63 61 66 c3 a9 2e 74 78  74 0a                    |caf...txt.|
0000000a

Em seguida, crie um nome de arquivo usando os códigos hexadecimais para as partes que não são encontradas no teclado:

$ ls $'caf\xc3\xa9.txt'
café.txt

No bash, $ '...' expandirá as fugas (muito parecido com "echo -e"). E \ x seguido por um código hexadecimal de 2 dígitos irá substituí-lo por esse caractere.

E não vejo nada de errado com um:

ls caf*.txt

seguido por um

mv caf*.txt cafe.txt

Mas, se por algum motivo isso corresponder a vários arquivos, você poderá usar o material hexadecimal:

ls $'caf\xc3\xa9.txt'
mv $'caf\xc3\xa9.txt' café.txt
    
por 07.05.2012 / 11:34
1

Sistemas de arquivos Unix armazenam nomes de arquivos como uma sequência bruta de bytes. O kernel não sabe ou se importa com o que os nomes realmente são.

Cabe aos aplicativos acessá-los para usar a codificação adequada para exibir caracteres não ASCII corretamente. A maneira usual é através das variáveis de ambiente LC_ALL / LC_ * ou LANG. Eu recomendaria usar uma localidade UTF-8 em todos os aplicativos que acessam o sistema de arquivos para evitar incompatibilidades / inconsistências.

    
por 07.05.2012 / 11:17

Tags