web-dev-qa-db-fra.com

Impossible de supprimer les fichiers contenant des caractères spéciaux dans le nom de fichier

J'utilise Ubuntu 9.10 (Karmic) et j'ai un répertoire avec beaucoup de fichiers, parmi lesquels ces deux fichiers:

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

Je voudrais supprimer bär.jpg mais je ne peux pas.

Si je tape rm b et que je tape TAB, les deux fichiers s'affichent, si j'ajoute ä et que je tape TAB, rien ne s'affiche.

Que faut-il faire pour supprimer bär.jpg?

Supprimer le dossier parent n'est pas une solution pour moi, car il contient de nombreux fichiers utilisés par un environnement productif.

6
bzero

Je viens de découvrir comment supprimer de tels fichiers avec des caractères spéciaux:

  1. cd <directory with that file>
  2. ls -ALi
  3. À l'extrême gauche de la liste des répertoires, vous voyez l'ID de l'inode de chaque fichier.
  4. Supprimer votre fichier via l'ID d'inode:

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

Cela a bien fonctionné pour mon problème. J'espère que cela t'aides!

10
bzero

Vous pouvez utiliser caractères génériques bash avec

 rm b?r.jpg

? représente exactement un caractère. Une alternative (si les deux noms de fichier avaient la même longueur) serait

rm b[!e]r.jpg

[!e] signifie tout caractère sauf "e".

2
Sparhawk

Eh bien, vous pouvez essayer d’utiliser la correspondance via grep pour supprimer le fichier s’il s’agit d’un fichier problématique.

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

Ici, je crée un fichier nommé junk_ä_deleteme. Je le supprime ensuite en faisant correspondre les caractères avant ("junk") et après ("deleteme") du symbole amusant. Cette approche n'est pas très bonne, mais s'il s'agit d'un seul fichier, cela pourrait fonctionner.

Une meilleure solution serait peut-être de former une expression rationnelle correspondant à votre fichier, puis de diriger ce nom de fichier vers rm.

0
Neal P