Como remover caracteres inválidos de arquivos

Nomes de arquivos com caracteres inválidos são comuns. Algumas vezes são gerados por algum erro em um programa ou são encontrados em arquivos que fizemos download. Há até um apelido para esses caracteres nos nomes dos arquivos: gremlins.

Para resolver este problema a primeira coisa que precisamos saber é qual é o caracter inválido no nome do arquivo ou arquivos. Isso porque ao chamar o comando ls ele mostra geralmente uma ? ou algum outro caracter ilegível. Mas o próprio comando ls pode ajudar:

ls -b

O parâmetro -b vai mostrar quais são os caracteres. Por exemplo, pode ser um \n. Nesse caso bastará usar o comando rename passando uma expressão regular que trocará todo \n encontrado nos nomes de todos os arquivos do diretório em questão por nada, vazio:

rename "s/\\n//g" *.*

O exemplo usado foi o \n mas pode ser algum outro caracter que o ls - b exibirá no formato \XXX, a representação ASCII desse caracter.

Atualização:  Se seu problema for de encoding tente usar o convmv como explicado no post: http://mastigado.wordpress.com/2012/12/20/renomeando-pastas-e-arquivos-invalidos-no-linux-usando-convmv/

2 comentários:

  1. Olá amigo. Estou aprendendo a utilizar expressões regulares, mas confesso que este método não funcionou para mim.
    Recomendo utilizar o pacote convmv.
    Neste post http://www.dihitt.com.br/barra/arquivos-e-pastas-com-codificacao-invalida-no-ubuntu-1104 consegui resolver meu problema instantâneamente.

    ResponderExcluir
    Respostas
    1. Bacana a dica do convmv mas ele não servia para o meu caso porque o problema que eu tinha em mãos não era de encoding. Um programa com bug (que eu não tinha acesso ao código fonte) gerou arquivos com '\n' no meio do nome e só consegui resolver da forma descrita no post.

      Excluir