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


Le plus proche que j'ai eu est

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

mais cela ne fonctionne pas pour les fichiers qui n'ont pas d'extension ...


205
2017-09-06 07:58


origine




Réponses:


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

Pour tout supprimer dans un répertoire, utilisez:

rm /path/to/directory/*

Vous pouvez utiliser le -r option, par exemple:

rm -r /path/to/directory/* 

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


235
2017-09-06 08:06



Si vous souhaitez également supprimer les fichiers cachés, exécutez shopt -s dotglob avant de courir rm (...) - danjjl
Les moyens all files ;) *.* signifie tous les fichiers contenant un . quelque part dans le nom - Rinzwind
@Rinzwind, plus précisément, l'astérisque signifie "zéro ou plus de n'importe quel caractère". Alors *a* signifie zéro ou plusieurs caractères, suivi de a suivi de zéro ou plusieurs caractères. Cela correspondrait aux noms de fichiers happy, apple, a ou la. - DisgruntledGoat
@ user784637 vous êtes trop facilement impressionné - barlop
Voici la commande que vous voulez: rm - * - anon58192932


  • Retirer le dossier avec tout son contenu (y compris tous les dossiers intérieurs):

    rm -rf /path/to/directory
    
  • 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 (ne pas suppression des dossiers intérieurs):

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

Où:

  • rm - signifie "retirer"
  • -f - signifie "Obliger"ce qui est utile lorsque vous ne voulez pas être invité / invité si vous souhaitez supprimer une archive, par exemple.
  • -r - signifie "récursif"Cela signifie que vous voulez descendre récursivement chaque dossier et tout supprimer.

126
2017-09-07 17:26



J'ai trouvé que c'était la réponse la plus complète et la plus utile, en plus de la réponse qui avait été marquée comme acceptée. - inspirednz
rm -rf /path/to/directory/* ne supprime pas un fichier caché dans le dossier par exemple .htaccess. Peut être rm -rf /path/to/directory/.? Je n'ai pas essayé. - Mark Berry
@MarkBerry rm -rf /path/to/directory/.* - Lilian A. Moraru
@ LilianA.Moraru, j'ai fait des tests aujourd'hui. rm -rf /path/to/directory/.* supprime uniquement les fichiers cachés dans le répertoire spécifié. En regardant le commentaire de @ danjjl sur la réponse de @ Rinzwind, pour supprimer également les fichiers cachés, exécutez shopt -s dotglob avant de courir rm -rf /path/to/directory/*. - Mark Berry
MISE EN GARDE: rm -rf /path/to/directory/.* sur mon système a causé la suppression d'éléments dans /path/to. Heureusement, je venais de sauvegarder toutes mes données sur un disque séparé. Inutile de dire, ne pas émettre la commande rm -rf /path/to/directory/.* sauf si vous avez sauvegardé tout votre ordinateur dans un emplacement séparé / sécurisé! - lawlist


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/{*,.*}

30
2017-11-23 09:38



Cela devrait être la belle réponse acceptée. Je vous remercie! - Nam G VU
Ce glob ne correspond pas "." et aussi? - hertzsprung
@hertzsprung - il le fait, et il vous avertira qu'il ne peut pas supprimer ./ et ../, mais il supprimera toujours les fichiers cachés. - Ryan Wheale
Cela ne fonctionne pas sur la console Mac, les fichiers cachés sont toujours là avec cette ligne de commande. - agapitocandemor


Si vous souhaitez supprimer uniquement les fichiers du répertoire / path / to / que vous pouvez faire

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

ou

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

Vous pouvez faire des charges avec find, l'avantage est que vous pouvez lister ce qui se trouve sans le canaliser rm de sorte que vous pouvez voir ce qui sera supprimé avant de commencer.


8
2017-09-06 12:13



GNU find comme un -delete prédicat. Si vous voulez toujours utiliser -exec, en remplaçant \; avec + rassemblera rm appelle ensemble, augmentant l'efficacité. - enzotib
Une grande quantité de fichiers avec '+' posera des problèmes, car la liste sera trop grande, identique à rm -f *. et lors de la suppression de grandes quantités de fichiers du même dossier (en millons), les deux ne sont pas bons :) Au final, C ++ est arrivé et a éliminé les fichiers par ordre d’inodes dans l’arborescence. - Osis
Vous devriez vraiment ajouter un - après le rm. Sans cela, si vous avez un nom de fichier -rf ou similaire sera interprété comme des arguments pour rm. par exemple. xargs -0 rm - ou -exec rm - {} \; - Richm
vous pouvez également fournir l'argument -n à xargs. Cela entraînera le fractionnement des commandes rm pour avoir un nombre maximum d'arguments, c'est-à-dire que 'xargs -n 100 -0 rm -' supprimera les fichiers par morceaux de 100. - Richm
Vous pouvez également ajouter -maxdepth 1 pour vous assurer que find ne renvoie aucun fichier provenant de sous-répertoires. c'est-à-dire find / path / to / directory -maxdepth 1 -type f - Richm


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 revérifiez toujours votre ligne avant d'appuyer sur Entrée, rm -rf peut causer beaucoup de dégâts aussi, par ex. si vous insérez accidentellement un espace après la première barre oblique tout en ayant les droits de superutilisateur ...


6
2017-09-07 08:51





Pour supprimer tous les fichiers et répertoires (y compris le caché ceux dans un répertoire, vous pouvez essayer ce qui suit:

  • supprimer le dossier, puis le recréer

    rm -rf dir_name && mkdir dir_name
    
  • utilisation find

    find dir_name -mindepth 1 -delete  
    

Ici nous spécifions -mindepth 1 pour exclure le répertoire dir_name lui-même.
Regardez le lien suivant:
https://unix.stackexchange.com/questions/12593/how-to-remove-all-the-files-in-a-directory


5
2017-11-27 16:05



Merci pour vos conseils et j'ai ajouté plus d'explications pour les liens. - zeekvfu
Soyez prudent, car la suppression et la recréation du dossier peuvent entraîner des autorisations différentes / incorrectes pour ce dossier! - einjohn


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


1
2018-05-01 00:59



DOS est DEL pour les fichiers et RMDIR pour les répertoires vides - et les fichiers cachés et système doivent avoir ces attributs ATTRIB supprimés en premier. Pas aussi simple que ça;) - Eric


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

-d indique à supprimer également les répertoires.


0
2017-08-29 07:17





Étant donné que cette question est constamment au top de Google lorsque je le cherche moi-même:

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

  1. Certains d'entre eux comprennent . et .. ce qui est bruyant, déroutant et ennuyeux.

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

  3. Ils ne suppriment pas dans un ordre correct (premier plus profond) 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 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 -xdev argument pour éviter de descendre dans les montures (comme /proc etc.).

Pourquoi pas -depth ou -delete?

Bien que les gens me critiquent constamment pour cela, ces méthodes ont un inconvénient: il ne semble pas qu'elles soient suffisamment extensibles pour permettre -pruneun sous-répertoire (sans introduire plus de problèmes). Contrairement à cette méthode, vous pouvez insérer

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

avant le -mindepth argument pour exclure subdir d'avoir son contenu supprimé.


-1
2018-05-21 00:54



Et pour la profondeur-premier ordre, il y a un -depth drapeau dans find pour ça. - Sergiy Kolodyazhnyy
Euh ... pourquoi ne pas utiliser -delete avec find? -delete est en profondeur d'abord. Vous supposez déjà que non-POSIX find avec le -printf, vous pourriez aussi bien utiliser -delete ou -depth -print0 | xargs -0 rm - muru
@muru: Parce que je ne savais pas mieux ... Je vais le changer. - Mehrdad
@muru: En fait, il semble que votre méthode ne fonctionne pas avec -not \( -path "$DIR/subdir" \)... mais le mien fait? Pourquoi? - Mehrdad
@ Mehrdad qu'est-ce que c'est censé faire? - muru