Comment supprimer tout dans un répertoire?


25

Comment supprimer tout dans un répertoire, y compris les fichiers et répertoires cachés?

En ce moment, j'utilise ce qui suit:

rm -rf *
rm -rf .*

5
Vous pouvez les combiner avec rm -rf .* *.
utilisateur inconnu

2
Vous pouvez monter un répertoire puis exécuterrm -rf yourdirectory/*
shreyansp

1
désolé manqué la partie du répertoire caché. La solution des utilisateurs précédents couvre cela
shreyansp

Cette deuxième option que vous avez publiée est très dangereuse. Il correspondra au ..répertoire, ce qui supprimera tout ce qui se trouve dans le répertoire ci-dessus .
Richard Peterson

Réponses:


17

Simple et direct:

find -delete 

Comprend des répertoires et des fichiers cachés. Au moins, gnu-find le sait -delete, votre findpeut différer.


1
Pour éviter de supprimer le répertoire, utilisez find /path -delete -mindepth 1.
orodbhen

@orodbhen: find -delete ne supprimera pas le répertoire où vous lancez la commande (comme dans la question avec rm).
utilisateur inconnu

11

La meilleure réponse est: ne faites pas ça. Supprimez récursivement le répertoire lui-même, puis recréez-le en tant que répertoire vide. Il est plus fiable et plus facile pour les autres de comprendre ce que vous essayez de faire. Lorsque vous recréez le répertoire, il peut avoir un propriétaire, un groupe et des autorisations différents. Si ceux-ci sont importants, faites attention. De plus, si des programmes en cours d'exécution ont des descripteurs de fichiers ouverts (descripteurs) sur le répertoire, vous ne voudrez pas le supprimer. Si aucun de ces cas particuliers ne s'applique, il est plus simple de supprimer l'intégralité du répertoire.


7
Alors, comment est-ce plus facile? «Soyez prudent» n'est pas une réponse. Je ne comprendrais pas pourquoi quelqu'un supprime un répertoire et le reconstruit à nouveau.
utilisateur inconnu

J'ai ajouté l'expression "comme un répertoire vide", c'est peut-être plus clair.
Chris Quenelle

2
Non, cela n'explique pas pourquoi vous supprimez un répertoire et le recréez ensuite. Aux choses à considérer appartient, entre autres, la date / heure de création aussi.
utilisateur inconnu

2
Si ce répertoire est le répertoire de travail actuel d'un processus, vous pouvez rencontrer des problèmes. En outre, si vous supprimez le répertoire, vous supprimez des informations sur ses autorisations et sa propriété.


5

En supposant que bash 4+:

shopt -s dotglob
rm -rf -- *
##or:
rm -rf ./*

Avec dotglob activé, *s'étend à tous les fichiers et répertoires, même ceux commençant par .- mais ne s'étend pas à .et .., il est donc sûr de l'utiliser avec rm.


2

si vous êtes dans le répertoire:

cd .. && rm -rf dir && mkdir dir && cd dir

autrement:

rm -rf /path/to/dir && mkdir /path/to/dir


2

Oh mon Zsh

rm -rf (.|)*

Encore une fois, c'est uniquement pour Zsh.


2
Ou *(D)(le Dqualificatif glob active l' glob_dotsoption pour ce modèle).
Gilles 'SO- arrête d'être méchant'

Ou rm -rf {.,}*(contrairement à bash, zsh n'inclut pas .et ..dans {.,}*, au moins sur ma machine).
sasha

1

Que diriez-vous d'utiliser find. Je pense que c'est généralement un bon choix lorsque vous devez fouiller dans des sous-répertoires.

find . -type f -exec rm {} \;

1
il y a un commutateur -delete, donc vous pouvez supprimer des répertoires. (au moins dans gnu-find).
utilisateur inconnu

cela ne supprimera pas les sous
sasha

-2

Essayez rm -rf *?*. Cela supprimera les fichiers normaux et masqués.


4
Pas dans aucune coquille que je sache.
Gilles 'SO- arrête d'être méchant'

vous avez raison. il ne supprime pas les sous-répertoires.
gladimdim

4
Il est plus probable que le problème *?*ne correspondra pas aux fichiers / répertoires "dot" (sauf si vous avez activé l' dotgloboption dans bash , l' GLOB_DOTSoption dans zsh ou un équivalent pour le shell que vous utilisez).
Chris Johnsen
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.