Eu tenho um monte de diretórios e subdiretórios que contêm arquivos com caracteres especiais, como este arquivo:
robbie@phil:~$ ls test�sktest.txt
test?sktest.txt
A descoberta revela uma sequência de escape:
robbie@phil:~$ find test�sktest.txt -ls
424512 4000 -rwxr--r-x 1 robbie robbie 4091743 Jan 26 00:34 test\323sktest.txt
A única razão pela qual posso digitar seus nomes no console é por causa do preenchimento de guias. Isso também significa que eu posso renomeá-los manualmente (e remover o caractere especial).
Eu configurei LC_ALL para UTF-8, o que parece não ajudar (também não em um novo shell):
robbie@phil:~$ echo $LC_ALL
en_US.UTF-8
Estou conectando à máquina usando ssh do meu mac. É uma instalação do Ubuntu:
robbie@phil:~$ cat /etc/lsb-release
DISTRIB_ID=Ubuntu
DISTRIB_RELEASE=7.10
DISTRIB_CODENAME=gutsy
DISTRIB_DESCRIPTION="Ubuntu 7.10"
Shell é Bash, TERM está definido como xterm-color.
Esses arquivos já estão lá há um bom tempo e não foram criados usando essa instalação do Ubuntu. Portanto, não sei quais eram as configurações de codificação do sistema.
Eu tentei as coisas ao longo das linhas de:
find . -type f -ls | sed 's/[^a-zA-Z0-9]//g'
Mas não consigo encontrar uma solução que faça tudo o que eu quero:
- Identifique todos os arquivos que possuem caracteres não exibidos (o item acima ignora demais)
- Para todos esses arquivos em uma árvore de diretórios (recursivamente), execute mv oldname newname
- Opcionalmente, a capacidade de transliterar caracteres especiais como ä para a (não necessário, mas seria incrível)
OU
- Exiba corretamente todos esses arquivos (e nenhum erro nos aplicativos ao tentar abri-los)
Eu tenho bits e partes, como iterar sobre todos os arquivos e movê-los, mas identificar os arquivos e formatá-los corretamente para o comando mv parece ser a parte mais difícil.
Qualquer informação extra sobre por que eles não são exibidos corretamente ou como "adivinhar" a codificação correta também é bem-vinda. (Eu tentei o convmv, mas parece não fazer exatamente o que eu quero: http://j3e.de/linux/convmv/ )