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

Le plus proche que j'ai obtenu est

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

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

Linux n'utilise pas d'extensions. C'est au créateur du fichier de décider si le nom doit avoir une extension. Linux regarde les premiers octets pour comprendre de quel type de fichier il s'agit.

  • Pour tout supprimer fichiers non cachés* dans un répertoire utiliser:

    rm /path/to/directory/*

    Cependant, cela affichera une erreur pour chaque sous-répertoire, car dans ce mode, il est uniquement autorisé à supprimer des fichiers.

  • Pour supprimer tous les fichiers et sous-répertoires non cachés (ainsi que tout leur contenu) dans un répertoire, utilisez:

    rm -r /path/to/directory/*

* Les fichiers et répertoires cachés sont ceux dont les noms commencent par . caractère (point), p.ex.: .hidden-file ou .hidden-directory/. Notez que, dans Bash, si le dotglob option (qui est désactivé par défaut) est défini, rm agira également sur les fichiers cachés, car ils seront inclus lorsque * est développé par le shell pour fournir la liste des arguments de nom de fichier.

  • Pour supprimer un 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, si vous voulez vous assurer que les fichiers/répertoires cachés sont également supprimés:

    rm -rf /path/to/directory/{*,.*}
  • Pour supprimer tous les & quot; fichiers" de l'intérieur d'un dossier(pas suppression des dossiers intérieurs):

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

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

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

est équivalent à 2 séparés rm -rf appeler:

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

Pour éviter ce problème, vous pouvez utiliser 'apostrophe'(empêche toutes les extensions, même des variables shell) ou "guillemet"(permet l'expansion des variables shell, mais empêche d'autres expansions):

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

Où:

  • rm - stands pour supprimer
  • -f - stands pour force ce qui est utile lorsque vous ne voulez pas être invité/invité si vous souhaitez supprimer une archive, par exemple.
  • -r - stands pour récursive ce qui signifie que vous souhaitez parcourir récursivement chaque dossier et tout supprimer.

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

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

  • supprimez le dossier, puis recréez-le

    rm -rf dir_name && mkdir dir_name
  • utiliser 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 oeil au lien suivant:
https://unix.stackexchange.com/questions/12593/how-to-remove-all-the-files-in-a-directory

Si vous souhaitez supprimer uniquement les fichiers du répertoire /path/to/, 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 faire des charges avec find, l'avantage est que vous pouvez lister ce qui se trouve sans le canaliser vers rm ainsi, vous pouvez voir ce qui sera supprimé avant de commencer.

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 retour, rm -rf peut également causer beaucoup de ravages, par exemple si vous insérez accidentellement un espace après la première barre oblique tout en ayant des autorisations de superutilisateur...

Puisque cette question est constamment en haut de Google lorsque je la 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 ennuyeux.

  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 d'informations ci-dessous).

Donc, pour supprimer RÉCURSIVEMENT 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 empêcher de descendre dans les montages (comme /proc etc.).

Pourquoi pas -depth ou -delete?

Malgré le fait 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 -prunecréer un sous-répertoire (sans introduire plus de problèmes). Contrairement à cette méthode, vous pouvez insérer

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

avant la -mindepth argument à exclure subdir d'avoir son contenu supprimé.

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

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

-d indique également de supprimer des répertoires.

Voir la réponse ici, cela peut également supprimer les fichiers cachés sans avertissement et supprimer le répertoire lui-même ubuntu - Delete contents but not directory in Linux? - Stack Overflow

Je n’ai pas assez de réputation pour ajouter une vraie réponse, mais lorsque vous utilisez la solution shopt-s dotglob && rm /path/to/directory/* dans bash, (shopt-s dotglob && rm /path/to/directory/*) (avec parenthèses) empêchera shopt-s dotglob de fuir au-delà de cette seule commande. (Les parenthèses exécutent les commandes contenues dans un sous-shell.)