Não é possível excluir arquivos contendo caracteres especiais no nome do arquivo

5

Eu uso o Ubuntu 9.10 (Karmic) e tenho um diretório com muitos arquivos, entre eles esses dois arquivos:

./baer.jpg
./bär.jpg

Gostaria de excluir bär.jpg , mas não consigo.

Se eu digitar rm b e atingir TAB , ele mostrará os dois arquivos, se eu acrescentar ä e% TAB , nada será exibido.

O que deve ser feito para excluir bär.jpg ?

Excluir a pasta pai não é uma solução para mim, pois há muitos arquivos nesse diretório que são usados por um ambiente produtivo.

    
por bzero 27.12.2012 / 09:23

3 respostas

9

Acabei de descobrir como excluir esses arquivos com caracteres especiais:

  1. cd <directory with that file>
  2. ls -ali
  3. No lado esquerdo da listagem do diretório, você vê o ID do inode de cada arquivo.
  4. Exclua seu arquivo via ID do inode:

    find . -inum <inode ID of your file> -exec rm -i {} \;

Isso funcionou bem para o meu problema. Espero que isso ajude!

    
por bzero 27.12.2012 / 09:34
2

Você pode usar curingas bash com

 rm b?r.jpg

onde ? significa exatamente um caractere. Uma alternativa (se ambos os nomes de arquivo fossem do mesmo tamanho) seria

rm b[!e]r.jpg

onde [!e] significa qualquer caractere, exceto "e".

    
por Sparhawk 26.03.2014 / 14:13
0

Bem, você pode tentar usar a correspondência via grep para excluir o arquivo, se for um único arquivo problemático.

neal@dsadsa:~$ touch junk_ä_deleteme
neal@dsadsa:~$ ls | grep junk | grep deleteme | xargs rm

Aqui, estou criando um arquivo chamado junk_ä_deleteme . Eu apago depois, combinando os caracteres antes ("junk") e depois ("deleteme") do símbolo engraçado. Essa abordagem não é muito boa, mas se for um arquivo único, pode funcionar.

Talvez uma solução melhor seja formar um regex para corresponder ao seu arquivo e, em seguida, canalizar esse nome de arquivo para rm .

    
por Neal P 27.12.2012 / 09:32