Grâce à une manœuvre audacieuse de ma part, j'ai accidentellement créé un répertoire appelé (par exemple) -A, et j'ai fini par le remplir de fichiers.
Je souhaite supprimer ledit répertoire. J'ai essayé:
rmdir -- -A
mais il me dit alors que le répertoire contient toujours des fichiers. Et je ne peux pas comprendre comment cd dans le répertoire pour supprimer lesdits fichiers.
Que dois-je faire pour me débarrasser de ce répertoire gênant?
unix
unix-shell
Kate Bertelsen
la source
la source
Réponses:
Utilisez - sur chaque commande.
la source
Vous pouvez mettre ./ devant le fichier - de cette façon, rm ou rmdir ne se comportera pas comme si le nom de fichier était un indicateur d'option.
Vous pouvez également émettre l'option - qui indique à rm d'agir comme si tout ce qui se trouvait après le - est un nom de fichier et qu'il ne devrait plus traiter d'options. Il peut y avoir des versions plus anciennes et funky de rm qui n'obéissent pas à cela, bien que mon zoo d'Unixes antiques soit devenu assez petit ces jours-ci, donc je ne peux pas vous dire lesquels ou s'il existe des versions qui ne comprennent pas -.
Vous devriez prendre l'habitude de mettre le ./ devant les noms quand vous supprimez de toute façon - vous ne savez jamais s'il y a un fichier nommé -r ou -rf dans votre répertoire. Vous pourriez dire que vous devriez toujours utiliser le - mais je trouve que le ./ est plus naturel car il rend explicite que "je veux supprimer les fichiers dans ce répertoire, pas quoi que * passe par glob à"
la source
Renommez-le et traitez-le normalement:
la source
rmdir ne supprimera pas un répertoire contenant quoi que ce soit à l'intérieur. "rm -rf" le fera. rmdir est considérablement plus sûr que "rm -rf". La réponse de Moo est probablement la meilleure.
la source
La commande ci-dessus fonctionne pour moi.
la source
Une méthode différente serait de supprimer par inode (cela fonctionne pour les fichiers / répertoires avec d'autres caractères qui sont difficiles à supprimer avec juste rm).
la source
-exec
n'échappe pas au nom et n'a pas besoin de le faire; l'argument transmis via l'un desexec*
appels système est le nom réel. Ce n'est que l' entrée du shell qui a besoin de caractères spéciaux comme un astérisque point-virgule, etc. entre guillemets pour que le shell passe le nom réel correct (SANS guillemets). Cela dit,find -exec rm -f {}
ne fonctionne que pour un fichier, pas un répertoire comme demandé pour ce Q;find -exec rm -rf {}
gère le répertoire et même le répertoire non vide, mais sauterfind
et simplement fairerm -rf ./-A
est beaucoup plus simple.find peut supprimer le répertoire de cette façon:
la source
J'essayais de supprimer un répertoire nommé
-p
. La réponse de @ Moo a atteint ce que je n'ai pas pu fairerm ./-p
, qui est largement disponible sur de nombreuses pages Web après une recherche Google.Une autre méthode consiste à utiliser le numéro d'inode. J'ai utilisé la méthode décrite ici:
https://www.cyberciti.biz/tips/delete-remove-files-with-inode-number.html
En bref, utilisez les commandes suivantes:
find
commande en utilisant l'-exec rm -irf
argument d'un fichier ou-exec rm -ifdr
d'un répertoire.Assurez-vous d'utiliser le
-f
dans l'indicateur, sinon bash se plaindra de ne pas pouvoir trouver le répertoire ou le fichier.Testé sur:
la source
rm -d
jamais besoin et généralement pas-f
lors de l'appel depuisfind
, mais vous avez besoin-r
d'un répertoire et vous n'en avez pas besoin pour un fichier. Même corrigée, cette méthode est toujours maladroite et inférieure. Pour un répertoire non vide, faites-lerm -fr ./-p
- c'est r pour un répertoire, et f selon les paramètres d'autorisation.