Você tem um problema de codificação que deve ser resolvido.
O ?
exibido por ls
é um marcador e não significa que o arquivo tenha o nome ?
.
Veja como reproduzir seu problema usando iconv
, em um sistema Linux configurado utf8 usual:
$ mkdir /tmp/test
$ cd /tmp/test
$ touch $(echo é | iconv -t windows-1252) # that's the eacute character
$ ls
?
$ ls|cat
�
A última linha significa apenas que "a codificação utf8 inválida é exibida" e provavelmente não pode ser copiada / colada corretamente sem perder suas informações. windows-1252
é apenas um exemplo. Pode ter sido muitos outros (por exemplo: iso-8859-1
). A informação ainda está lá:
$ ls|iconv -f windows-1252
é
Então, depois de descobrir qual codificação foi usada para gravar esses arquivos no Linux (tente iconv -l|egrep -i 'win|iso-8859'
para uma possível lista de candidatos), você pode tentar renomear alguns lotes. Tenha cuidado enquanto um exemplo pode funcionar, pode falhar em outro arquivo.
Exemplo de renomeação:
ENCODING="windows-1252" # once the right encoding was found
for file in *; do
dest="$(printf '%s' "$file" | iconv -f "$ENCODING")"
mv -i "$file" "$dest.new"
mv -i "$dest.new" "$dest"
done