Avoir un fichier nommé ~ (tilde) dans mon répertoire personnel

46

Je viens de remarquer que j'ai un fichier appelé ~dans mon ~répertoire.

$ ls -la ~
...
-rw-r-----  1 x1 x1  733962240 Mar  1 17:55 ~
...

Une idée de comment je peux mvou rmça?

scrrr
la source
Essayez de le supprimer par i-node.
Gronostaj

Réponses:

55

La solution idéale pour les fichiers qui ne peuvent pas être supprimés normalement:

ls -il 

La première colonne montrera le numéro d'inode des fichiers.

find . -inum [inode-number] -exec rm -i {} \;

Ceci supprimera le fichier avec le numéro d'inode spécifié après vérification.

À presser
la source
Cela a fonctionné. Peut-être que la solution de rici est bonne aussi, mais je n’ai pas essayé. Merci beaucoup!
scrrr
Oui, la réponse de Rici est bonne aussi. Et je pense que c'est mieux parce que c'est plus simple.
Andrey Regentov
sympa, +1. J'ai changé votre réponse pour utiliser -deleteau lieu de -exec, puis j'ai réalisé que vous utilisiez rm -ice qui est une bonne idée, alors j'ai annulé. Pardon.
Terdon
Ne t'inquiète pas. Toujours heureux quand quelqu'un juge mes réponses dignes de leur temps :)
Squeezy
Cette réponse n'a pas fonctionné pour moi. Ubuntu 14.04 LTS
KhoPhi
46

Vous devriez pouvoir faire référence à ce fichier comme ~/~(sans guillemets) car tilde-expansion applique uniquement le tilde ( ~) au tout début du mot.

rici
la source
17
aussi, aller à la chemise et rm ./~, pour la même raison que vous avez dit
Carlos Campderrós
@ CarlosCampderrós envisage de répondre à cette question. Je considérerais cela comme la "meilleure" solution et la plus simple, par rapport à d’autres réponses puisque ./~littéralement signifie "un fichier ou un dossier nommé ~dans le répertoire actuel" . Il n'y a pas de hacks comme des caractères d'échappement ou des références d'inodes.
ADTC
@ADTC: pour défendre ma réponse, il n'est pas nécessaire de changer le CWD, alors que le ./~fait le fait. Au bout de cinq ans, ma mémoire est un peu floue, mais je pense que c'est pourquoi je suggère ~/~plutôt que plus normale ./~: La question se réfère spécifiquement à « un fichier nommé ~dans [OP] le répertoire »; pas "dans le répertoire courant".
Rici
@rici Cela a du sens, et dans le contexte de la question, ce serait approprié. Mais j'aime bien voir les réponses qui sont générales, ou parler en général d'abord avant d'expliquer plus au cas spécifique de la question. C'est ma défense: D
ADTC
20

Citez-le ( rm '~') ou échappez-le ( rm \~).


C'est toujours l'un de ceux-ci (aussi pour par exemple $), ou add --pour empêcher le nom de fichier d'être interprété en tant qu'argument: rm -- -isupprime le fichier nommé -i; également utile rm -- *lorsque vous souhaitez supprimer tous les fichiers du répertoire en cours: Pas accidentel rm -f *simplement parce qu'un fichier est nommé ainsi.

Daniel Beck
la source
Hm, non, cela ne semble pas fonctionner .. J'ai essayé les guillemets simples, les échappements et les backticks .. il ne ramasse pas le fichier. Dit que cela n'existe pas ou interprète ~ comme le répertoire personnel ..
scrrr le
@scrrr Quelle est ta coque?
Daniel Beck
frapper. Mais le problème a résolu le chemin d'inode.
scrrr
@scrrr Heureux que votre problème soit résolu, mais je veux maintenant savoir pourquoi les échappements bash ne fonctionnent pas de la même manière sur votre système et sur le mien.
Isaac Rabinovitch
1
Prudent. --n'arrête que les arguments suivants interprétés en tant que paramètres - cela n'empêche pas le shell d'effectuer son développement (par exemple *), c'est ce qui se passe ici. (Je sais que vous l'avez suggéré comme solution de rechange à d'autres situations, mais un avertissement serait bon.)
Bob