Je sais que cela supprimera tout dans un sous-répertoire et en dessous:
rm -rf <subdir-name>
Mais comment effacez-vous tout ce qui se trouve dans le répertoire actuel, ainsi que tous les sous-répertoires situés en dessous, ainsi que le contenu de tous ces sous-répertoires?
Pratiquez l'informatique sécurisée. Montez simplement d'un niveau dans la hiérarchie et n'utilisez pas d'expression générique:
cd ..; rm -rf -- <dir-to-remove>
Les deux tirets --
dire rm
que <dir-to-remove>
n'est pas une option de ligne de commande, même si elle commence par un tiret.
Supprime tous les fichiers/répertoires situés sous le fichier actuel.
find -mindepth 1 -delete
Si vous voulez faire la même chose avec un autre répertoire dont vous avez le nom, vous pouvez simplement le nommer.
find <name-of-directory> -mindepth 1 -delete
Si vous souhaitez supprimer non seulement ses sous-répertoires et ses fichiers, mais également son répertoire, omettez -mindepth 1
. Faites-le sans le -delete
pour obtenir une liste des choses à supprimer.
Ce que je fais toujours c'est taper
rm -rf *
et puis appuyez sur ESC - *, et bash étendra le * à une liste explicite de fichiers et de répertoires du répertoire de travail en cours.
Les avantages sont:
En fait, j'aime tellement ça que j'en ai fait le comportement par défaut de TAB avec cette ligne dans .bashrc:
bind TAB:insert-completions
Utilisation
rm -rf *
Mise à jour: le .
représente le répertoire en cours, mais nous ne pouvons pas l'utiliser. La commande semble avoir des contrôles explicites pour .
et ..
. Utilisez plutôt le caractère générique Globbing. Mais cela peut être risqué.
Une version plus sûre IMO est d'utiliser:
rm -ri *
(Ceci vous invite à confirmer avant de supprimer chaque fichier/répertoire.)
Il est exact que rm –rf .
supprime tout le contenu actuel, y compris les sous-répertoires et leur contenu. Le point unique (.
) désigne le répertoire en cours. attention à ne pas faire rm -rf ..
depuis le double point (..
) désigne le répertoire précédent.
Ceci étant dit, si vous êtes comme moi et que plusieurs fenêtres de terminal sont ouvertes en même temps, vous feriez mieux de rester en sécurité et d'utiliser rm -ir .
Regardons les arguments de la commande pour comprendre pourquoi.
Premièrement, si vous regardez la rm
page de manuel de la commande (man rm
sous la plupart des Unix) vous remarquez que –r
signifie "supprime récursivement le contenu des répertoires". Donc, faire rm -r .
seul supprime tout ce qui se trouve dans le répertoire actuel et tout ce qui le suit.
Dans rm –rf .
le -f ajouté signifie "ignorer les fichiers inexistants, jamais demander". Cette commande supprime tous les fichiers et répertoires du répertoire en cours et ne vous invite jamais à confirmer que vous souhaitez réellement le faire. -f
_ est particulièrement dangereux si vous exécutez la commande sous un utilisateur privilégié, car vous pouvez supprimer le contenu de n’importe quel répertoire sans pouvoir vous assurer que c’est vraiment ce que vous voulez.
D'autre part, dans rm -ri .
le -i
qui remplace le -f
signifie "Demander avant toute suppression". Cela signifie que vous aurez la possibilité de dire "oups! Ce n'est pas ce que je veux" avant que l'entreprise ne supprime avec joie tous vos fichiers.
Dans mes premiers jours d'administrateur système, j'ai fait un rm -rf /
sur un système en étant connecté avec tous les privilèges (racine). Le résultat fut deux jours passés à restaurer le système à partir de sauvegardes. C'est pourquoi j'emploie maintenant rm -ri
maintenant.
rm -rf *
Ne le fais pas! C'est dangereux! ASSUREZ-VOUS QUE VOUS ÊTES DANS LE BON RÉPERTOIRE!
Que diriez-vous:
rm -rf "$(pwd -P)"/*
make bien sûr vous vous trouvez dans le bon répertoire
rm -rf *
Cette solution sûre et générale la plus simple est probablement:
find -mindepth 1 -maxdepth 1 -print0 | xargs -0 rm -rf
Je crois que cette réponse est meilleure:
https://unix.stackexchange.com/questions/12593/how-to-remove-all-the-files-in-a-directory
Si votre répertoire de niveau supérieur s'appelle
images
, exécutezrm -r images/*
. Ceci utilise l'opérateur glob de shell*
courirrm -r
sur chaque fichier ou répertoire dans les images.
en gros, vous montez d’un niveau, puis vous dites tout supprimer dans le répertoire X. De cette façon, vous spécifiez toujours le contenu du dossier dont le contenu doit être supprimé, ce qui est plus sûr que de simplement dire "tout supprimer ici", tout en préservant le dossier d'origine (ce que vous souhaitez parfois parce que vous n'êtes pas autorisé ou que vous ne voulez pas modifier les autorisations existantes du dossier)