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.

AK
la source
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.

JimR
la source
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
Felipe Alvarez
la source
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