É importante entender que esse não é o tipo de "corrupção do sistema de arquivos" que fsck
ajudará. No que diz respeito ao sistema de arquivos, os nomes dos arquivos podem ter qualquer sequência de bytes , desde que nenhum byte único tenha o valor 0x00 (ASCII NUL, marcador de fim de cadeia C) ou 0x2F ( /
o separador de diretório). (Se, de alguma forma, um nome de arquivo tiver um byte de 00 ou 2F incorporado, fsck
deve-se corrigir isso.)
Em vez disso, o que você tem são nomes de arquivos que o software aplicativo (Dolphin ls
) acham que contêm caracteres que não são exibidos no seu "código do idioma", por isso os substitui por caracteres de espaço reservado. Você também não pode digitar esses caracteres, portanto, manipular os arquivos é mais difícil, mas você pode fazê-lo desde que sem digitar ou copiar e colar o nome. Por exemplo, se você excluir ou renomear os arquivos com problemas diretamente no Dolphin, isso deve funcionar (eu diria que, se não funcionar, é um bug no Dolphin).
Se você precisar fazer algo sobre eles a partir do shell (por exemplo, se eles pertencem root
e, portanto, não podem ser modificados por um programa GUI), você pode nomeá-los indiretamente usando padrões "glob", que serão expandidos para a sequência correta (s) de bytes e transmitidos.
Agora, é claro, você não gostaria de excluir coisas por acidente, porque seu padrão glob correspondia muito, então minha recomendação seria usar o rename
utilitário Perl para converter cada nome de arquivo em sua codificação hexadecimal:
$ rename '$_ = unpack("H*", $_)' *
Isso não destrói nenhuma informação - nem o próprio arquivo, nem qualquer significado que possa ter sido originalmente codificado no nome do arquivo antes de ser confundido. Pode ser desfeito para arquivos específicos com
$ rename '$_ = pack("H*", $_)' 696d706f7274616e742e646f63
Cuidado: existem dois programas nomeados rename
, de origens diferentes; os comandos acima funcionarão apenas com o originado no Perl. No Ubuntu, o que você deseja é aquele do pacote "renomear", não o pacote "util-linux". rename -h
vai distinguir: é isso que você quer ...
$ rename -h
Usage:
rename [ -h|-m|-V ] [ -v ] [ -n ] [ -f ] [ -e|-E perlexpr]*|perlexpr
[ files ]
# ...
... não é isso que você quer ...
$ rename -h
Usage:
rename [options] <expression> <replacement> <file>...
# ...
A principal coisa a procurar é "perlexpr". Você pode ter uma versão mais antiga do renomear Perl que não entende todas as opções acima, mas o comando que eu mostrei ainda deve funcionar.
Edit: Sob 14.04 .5, o script perl incluído para rename
não suporta a opção -h. Você pode confirmar que possui a correta, verificando sua página de manual e man rename
, nesse caso, a linha superior conterá:
RENAME (1) Guia de referência de programadores Perl RENAME (1)