Comment supprimer un fichier avec un nom étrange?


33

J'ai écrit un programme qui utilise la fonction de mappage de mémoire POSIX ( mmap)

Le programme prend un fichier ( a.dat) et le mappe en mémoire pour lecture / écriture.

En raison d'erreurs dans le programme, chaque fois que j'exécute le programme, un fichier avec des noms étranges (par exemple, ?d?P?^z??d?P?^z?) est créé. L'erreur est résolue mais je ne parviens pas à supprimer les fichiers.

Je ne peux pas le supprimer en utilisant la ligne de commande ou en sélectionnant / supprimant du gestionnaire de fenêtres.

Alors, comment dois-je le supprimer? J'utilise Ubuntu 11.04.


1
Même si vous ne pouvez pas facilement taper le nom de fichier, sa suppression dans un gestionnaire de fichiers graphique devrait fonctionner correctement. Quelle erreur obtenez vous?
Thomas

2
@Aditya, je n'ai aucun problème à supprimer ces fichiers de la ligne de commande lors de l'échappement de leurs noms avec des guillemets simples ( rm '?d?P?^z??d?P?^z?'). Avez-vous essayé cela?
Frédéric Hamidi

la suppression du gestionnaire de fenêtres graphiques indique simplement que le fichier "nom de fichier" ne peut pas être supprimé. @ Frédéric Hamidi Merci de m'avoir aidé à supprimer un fichier. Mais l'autre avec le nom '? M? P ???)? M? P ???)' n'est pas supprimé ... Le message d'erreur indique "rm: impossible de supprimer`? M? P ???)? M ? P ???) ': Aucun fichier ou répertoire de ce type "
AK

1
@Aditya, cet autre fichier doit avoir des caractères non imprimables dans son nom. Essayez les étapes suivantes: 1 / Déplacez tous les fichiers valides hors de ce dossier, 2 / Problème rm *à l'intérieur du dossier.
Frédéric Hamidi

1
Lorsque vous saisissez le nom du fichier, essayez de commencer par des guillemets, puis utilisez la saisie semi-automatique dès que cela fonctionne (après un ou deux caractères). La complétion automatique serait d'appuyer sur la touche [tab] pour que le shell complète automatiquement le nom. De cette façon, vous pourriez mieux réussir à échapper correctement les noms.

Réponses:


45

rm -i -- *vous invitera à supprimer chaque fichier. Vous pouvez et devez remplacer «*» par une correspondance plus étroite s'il y a beaucoup de fichiers. Les --options de traitement s'arrêtent, donc un fichier nommé -dsera supprimé par rmavec succès.

Je l'ai utilisé dans le passé et cela fonctionne jusqu'à ce que vous frappiez un caractère spécial ou 2 qu'il n'aime pas.


1
Cela ne fonctionne pas pour un fichier nommé -d par exemple.
SCO

2
@SCO Si cela ne fonctionne pas pour vous et en fonction de votre version de rm, vous pouvez faire rm -i -- * Le --indique à certaines versions de rm qu'il n'y a plus de commutateurs de ligne de commande après le --et pour traiter les autres arguments comme des noms de fichiers.
JimR

1
Je pense que cette réponse devrait inclure le commentaire suggéré par @JimR: Utilisation --dans la rmcommande.
Felipe Alvarez

16

vous pouvez utiliser ls -lipour afficher tous les fichiers par leur inode. Exécutez ensuite cette commande pour supprimer le fichier:

find . -inum ${INODE_NUM} -delete

J'ai ajouté -maxdepth 1à ma trouvaille juste pour être en sécurité:

find . -maxdepth 1 -inum ${INODE_NUM} -delete

1
À proprement parler, ls -ic'est assez bon.
Scott

lsne supprime pas les fichiers. OP le veut.
Felipe Alvarez

4
La première ligne de votre réponse dit: «vous pouvez utiliser ls -lipour afficher tous les fichiers par leur inode». Je souligne que cela ls -isuffit pour obtenir une liste des noms de fichiers et leurs numéros d'inode correspondants. (Mais bien sûr, vous avez besoin ls -iasi vous souhaitez inclure des fichiers dot.)
Scott

Il est préférable de simplement passer l' -deleteoption à find, afin de minimiser l'utilisation d'un mauvais nom de fichier.
ScumCoder
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.