72 votes

Comment supprimer tous les fichiers et sous-répertoires d'un répertoire SANS supprimer le répertoire en bash ?

Existe-t-il une commande permettant de supprimer tous les fichiers et sous-répertoires d'un répertoire ? sans en supprimant le répertoire ?

Par exemple, si j'ai le répertoire dontDeleteMe avec des sous-répertoires 1 , 2 , 3 et chaque sous-répertoire contient quelques images, comment puis-je supprimer les sous-répertoires ? 1 , 2 et 3 et tous les fichiers qui s'y trouvent, sans supprimer le répertoire parent dontDeleteMe ?

86voto

Larry Miller Points 215

Pour tout enlever en un répertoire sans supprimer le répertoire, tapez dans :

rm -rfv dontDeleteMe/*

Veuillez noter que le /* est très importante. Si vous mettez un espace avant le * il supprimera tous vos fichiers dans votre répertoire actuel.

Aussi, soyez très prudent en jouant avec rm , -r y * tous dans la même commande. Ils peuvent être une combinaison désastreuse.

Mise à jour : Ok, j'ai réalisé que si vous avez des fichiers cachés/points [noms de fichiers avec des points au début, par ex. .hidden ] alors cela laissera ces fichiers intacts.

Donc, en réalité, la solution la plus simple à la question initiale est :

rm -rfv dontDeleteMe && mkdir dontDeleteMe

Une autre solution serait d'utiliser find 's -exec ou un tuyau vers xargs (ci-dessous) :

find dontDeleteMe/* -print0  | xargs -0  rm -rv

37voto

guciek Points 371

Borne ouverte ( Ctrl + Alt + T ) et tapez ceci :

find somedir -mindepth 1 -delete

Cela correspondra à tous les fichiers et répertoires dans somedir et ses (grands-)enfants, y compris les fichiers point "cachés", mais à l'exclusion de somedir à cause de -mindepth 1 entonces -delete les.

29voto

enzotib Points 86709

La seule raison rm -r ./* ne fonctionnent pas toujours, c'est parce que vous pouvez avoir des fichiers et/ou des dossiers cachés qui ne sont pas pris en compte par * .

A cette fin, bash offrent une option permettant de faire * correspond à tout, même aux objets cachés :

cd dont-delete-me
shopt -s dotglob
rm -r ./*

Il peut être utile de réinitialiser dotglob à son état par défaut (unset), si vous continuez à utiliser le Shell où vous avez exécuté les commandes ci-dessus :

shopt -u dotglob

6voto

Chris Marisic Points 1153
find /dontDeleteMe/ -xdev -depth -mindepth 1 -exec rm -Rf {} \;

Utilisez xdev option permettant de supprimer les fichiers uniquement dans les limites du périphérique.

4voto

kyleN Points 1225

Pour supprimer (dans le terminal) tous les fichiers et sous-répertoires sauf le répertoire de base nommé "dontdelete" :

rm -rf dontdelete/*

SistemesEz.com

SystemesEZ est une communauté de sysadmins où vous pouvez résoudre vos problèmes et vos doutes. Vous pouvez consulter les questions des autres sysadmins, poser vos propres questions ou résoudre celles des autres.

Powered by:

X