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?


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.


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.


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.


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
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.