web-dev-qa-db-fra.com

Comment supprimer tous les fichiers d'un répertoire?

Le plus proche que j'ai eu est

# rm /path/to/directory/*.*

mais cela ne marche pas pour les fichiers sans extension ...

270
user784637

Linux n'utilise pas d'extensions. Il appartient au créateur du fichier de décider s’il souhaite que le nom porte une extension. Linux examine le premier octet pour savoir quel type de fichier il traite.

Pour tout supprimer dans un répertoire, utilisez:

rm /path/to/directory/*

Vous pouvez utiliser l'option -r, par exemple:

rm -r /path/to/directory/*

pour supprimer également tous les sous-répertoires (ainsi que tout leur contenu) du répertoire dont vous supprimez le contenu. Sinon, une erreur s'affichera pour vous informer que le répertoire n'est pas supprimé.

321
Rinzwind
  • Pour supprimer le dossier avec tout son contenu (y compris tous les dossiers intérieurs):

    rm -rf /path/to/directory
    
  • Pour supprimer tous les contenu du dossier (y compris tous les dossiers intérieurs) mais pas le dossier lui-même:

    rm -rf /path/to/directory/*
    

    ou

    rm -rf /path/to/directory/{*,.*}
    

    si vous voulez vous assurer que les fichiers/répertoires cachés sont également supprimés.

  • Pour supprimer tous les "fichiers" d'un dossier ( et non supprimer les dossiers intérieurs):

    rm -f /path/to/directory/{*,.*}
    


  • Attention: si vous avez des espaces dans votre chemin, assurez-vous de toujours utiliser des guillemets.

    rm -rf /path/to the/directory/*
    

    équivaut à 2 appels rm -rf distincts:

    rm -rf /path/to
    rm -rf the/directory/*
    

    Pour éviter ce problème, vous pouvez utiliser 'single-quotes' (ne pas développer variables shell) ou "double-quotes" (agrandit Variables shell):

    rm -rf "/path/to the/directory/"*
    


Où:

  • rm - signifie "remove"
  • -f - signifie "force", ce qui est utile lorsque vous ne souhaitez pas être invité/demandé si vous souhaitez supprimer une archive, par exemple.
  • -r - signifie "récursif", ce qui signifie que vous souhaitez consulter tous les dossiers de manière récursive et tout supprimer.
158
Lilian A. Moraru

Pour supprimer tous les fichiers du répertoire (y compris les fichiers cachés et les sous-répertoires), exécutez:

rm -rf /path/to/directory/{*,.*}
39

Si vous souhaitez supprimer uniquement les fichiers de/path/to/directory, vous pouvez le faire.

find /path/to/directory -type f -print0| xargs -0 rm 

ou

find /path/to/directory -type f -exec rm '{}' \;

Vous pouvez effectuer des chargements avec findname__, l’avantage est de pouvoir répertorier ce qui est trouvé sans le rediriger vers rmafin que vous puissiez voir ce qui sera supprimé avant de commencer.

8
Richard Holloway

Pour supprimer tous les fichiers et répertoires (y compris ceux cachés ) d'un répertoire, vous pouvez procéder comme suit:

  • supprimer le dossier, puis le recréer

    rm -rf dir_name && mkdir dir_name
    
  • utilisez find

    find dir_name -mindepth 1 -delete  
    

Ici, nous spécifions -mindepth 1 pour exclure le répertoire dir_name lui-même.
Jetez un coup d’œil au lien suivant:
https://unix.stackexchange.com/questions/12593/how-to-remove-all-the-files-in-a-directory

7
zeekvfu

Si vous souhaitez également supprimer tous les sous-répertoires et le répertoire lui-même, vous pouvez utiliser rm -rf /path/to/directory. Mais vérifiez toujours votre ligne avant d'appuyer sur la touche Entrée. rm -rf peut également causer beaucoup de dégâts, par exemple. si vous insérez accidentellement un espace après la première barre oblique en ayant les autorisations de superutilisateur ...

6
Tobias Kienzler

Puisque cette question est constamment au sommet de Google lorsque je le recherche moi-même:

Les autres réponses souffrent de problèmes différents:

  1. Certains d'entre eux incluent . et .., ce qui est bruyant, déroutant et gênant.

  2. Certains d'entre eux oublient les fichiers cachés (fichiers commençant par un point).

  3. Ils ne suppriment pas dans un ordre correct (le plus profond en premier) pour permettre la suppression du répertoire.

  4. Ils descendent dans d'autres systèmes de fichiers (montés), ce qui est souvent indésirable.

  5. Ils sont difficiles à étendre correctement avec des paramètres supplémentaires (plus de détails ci-dessous).

Donc, pour supprimer de manière récurrente tous les fichiers et dossiers d'un répertoire, procédez comme suit:

find "${DIR}" -xdev -mindepth 1 -printf "%d\t%y\t%p\0" | sort -z -r -n | cut -z -f3- | xargs -0 -r -- rm -d --

Notez que j'ai ajouté un argument -xdev pour empêcher la descente dans les montages (comme /proc etc.).

Pourquoi pas -depth ou -delete?

Malgré le fait que les gens me votent constamment pour cela, ces méthodes ont un inconvénient: elles ne semblent pas suffisamment extensibles pour permettre à -Pruneing un sous-répertoire (sans introduire plus de problèmes). En contraste avec cette méthode, vous pouvez insérer

-not \( -path "${DIR}/subdir" -Prune \)

avant l'argument -mindepth d'exclure subdir du contenu de celui-ci sera supprimé.

1
Mehrdad

Vous pouvez cd dans le répertoire, puis exécutez la commande rm *.* comme dans le DOS, si vous vous en souvenez.

0
V K Mavani

Pour supprimer le répertoire actuel, vous pouvez par exemple utiliser rm -d ./*

-d demande également de supprimer les répertoires.

0
arviman