Comment supprimer un fichier dont le nom de fichier commence par un tiret (trait d'union ou moins) -
? Je suis ssh'd sur un serveur OSX distant et j'ai ce fichier dans mon répertoire:
tohru:~ $ ls -l
total 8
-rw-r--r-- 1 me staff 1352 Aug 18 14:33 --help
...
Comment dans le monde puis-je supprimer --help
d'un CLI? Je rencontre parfois ce problème sous différentes formes. Ces fichiers sont faciles à créer, mais difficiles à éliminer.
J'ai essayé d'utiliser une barre oblique inverse
rm \-\-help
J'ai essayé des citations
rm "--help"
Comment empêcher le caractère négatif (tiret ou trait d'union) d'être interprété comme une option?
rm --help
expliquer comment supprimer les noms de fichiers commençant par a-
. bonne question quand même.Réponses:
Utilisez "-" pour que rm arrête l'analyse des options de ligne de commande, comme ceci:
la source
rm
commande prennent-elles en charge l'--
argument?--
sont antérieurs à GNU (SysIII, 1980) et sont standard / POSIX. Les utilitaires standard, à quelques exceptions près (commeecho
), comprennent--
. YMMV pour d’autres commandes s’ils n’utilisent pas l’API getopt () pour analyser les options.Ou tu peux faire
la source
--
spécialement.-
des services publics de texte oucd
, lefoo=bar
deawk
...rm -- <filename>
.Utilisez
find
pour le faire:Et c’est une bonne méthode car si vous avez plusieurs fichiers de ce type que vous pouvez supprimer, vous pouvez obtenir une liste de prévisualisation des fichiers en exécutant simplement find sans l’
-delete
option en premier, puis si la liste des fichiers est correcte, exécutez-la. encore avec-delete
.En fait, éviter
rm
en faveurfind
(surtout avec la prévisualisation en premier) est une bonne habitude qui vous aidera à éviter les erreurs avecrm *
qui vous mordra inévitablement un jour.Notez cependant que find trouvera dans tous vos sous-répertoires. Vous pouvez donc l'exécuter avec une contrainte de profondeur de sous-répertoire comme celle-ci:
ce qui limite la recherche au répertoire en cours.
la source
find
une liste de fichiers / répertoires à examiner. Doncfind . -name...
.-delete
et-maxdepth
ne sont pas des options standard non plus.Les réponses de Vegar Nilsen et d’edfuh sont très bonnes et constituent les solutions appropriées à un problème de ce type.
Je souhaite ajouter une réponse générale à cette question qui vous permet de supprimer tout fichier portant un nom de fichier difficile. Tout d'abord, son numéro d'inode est obtenu à l'aide de
ls -i
ou sous une forme quelconquestat
, puis le fichier est supprimé en recherchant des fichiers dans le répertoire actuel par numéro d'inode et en exécutant larm
commande sur le fichier avec un numéro d'inode correspondant.Les numéros d'inode étant uniques dans chaque système de fichiers, vous pouvez supprimer n'importe quel fichier à l'aide de cette option. unicode ou en utilisant des caractères d'échappement. Il est très ennuyeux de taper, je recommande donc d’ajouter la ligne.
dans votre
.inputrc
fichier si vous utilisez bash. Cela vous permet de parcourir la liste des achèvements possibles ( pour plus d'informations ).la source
find -name '--help' -delete
rm --help
, ce qui ne supprime toujours pas le fichier. Il suffit d'utiliserrm ./--help
(ourm -i *
.find
préfixe le chemin d'accès aux arguments de la ligne de commande pour tous les fichiers, de sorte qu'il s'exécuterm ./--help
etrm ./sub/dirs/--help
. Pour résoudre le second problème, il faudrait ajouter-maxdepth 1
, mais tout cela s’applique essentiellement à la solution de @ edfuh d’une manière plus détournée, plus alambiquée et-delete
plus sûre que de-exec rm
toute façon.{}
et\;
, sinon cela ne fonctionnera pas.-xdev
. Cela ne vous aidera pas à gérer celals -i --help
.Une solution brutale:
la source
Procédure pas à pas Linux pour créer un fichier avec des tirets et des espaces, puis pour le supprimer.
FAITES ATTENTION! Ne lancez pas accidentellement une
rm -rf /
commande de suppression en cascade ou une commande similaire.Si votre fichier que vous essayez de supprimer comprend astérisques ou des barres obliques, ne pas pomper accidentellement un
.
ou/*
ou*
ou un autre caractère générique qui pourrait cascade supprimer votre système d'exploitation.Créez un fichier appelé "--yo yo"
Tout d'abord, trouvez-le avec find:
Assurez-vous que la commande find trouve UNIQUEMENT le fichier que vous souhaitez supprimer:
Puis passez l’option -delete à rechercher, pour les supprimer:
Aaaannd c'est parti.
la source
Midnight Commander (
mc
) est le plus facile, il suffit de pointer dessus et d'appuyer sur F8;)la source
apt-get install mc || yum install mc; mc
différentes touches fléchées et F8 sont-elles plus faciles querm ./--help
?voici une solution que j'avais utilisée avant de trouver ce fil.
utiliser
vim
pour 'éditer' le répertoire:puis (dans vim) sélectionnez votre fichier, appuyez sur del et confirmez la suppression.
quand vous avez fini, quittez vim avec
:q
la source
Avez-vous essayé d'ajouter le nom du répertoire comme préfixe:
L'utilisation du répertoire comme préfixe du fichier aide en général à éviter l'interprétation erronée du caractère "moins" comme option de commande par la fonction d'analyse.
la source
Si vous voulez renommer le fichier
-.bar
,, (mv ne fonctionnera pas), essayez ceci:avant d'utiliser la commande:
Vous devriez pouvoir examiner le contenu du fichier original dans foo.bar
la source