web-dev-qa-db-fra.com

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

J'essaie de supprimer tous les fichiers et sous-répertoires d'un répertoire. J'ai utilisé rm -r pour supprimer tous les fichiers, mais je veux supprimer tous les fichiers et les sous-répertoires, à l'exclusion du répertoire supérieur lui-même.

Par exemple, j'ai un répertoire supérieur comme images. Il contient les fichiers header.png, footer.png et un sous-répertoire.

Maintenant, je veux supprimer header.png, footer.png et le sous-répertoire, mais pas images.

Comment puis-je faire cela sous Linux?

78
poorani

Si votre répertoire de niveau supérieur s'appelle images, exécutez rm -r images/*. Celui-ci utilise l'opérateur Shell glob * courir rm -r sur chaque fichier ou répertoire dans images.

63
Jordan Lewis

Pour supprimer des fichiers cachés, vous devez spécifier:

rm -r images/* images/.*

Avec des coquilles dont les globes incluent . et .., cela entraînera une erreur comme

rm: cannot remove `.' directory `images/.'
rm: cannot remove `..' directory `images/..'

mais il supprimera les fichiers cachés.

Une approche sans message d'erreur consiste à utiliser find/delete avec mindepth. C'est gnu-find.

find images -mindepth 1 -delete

Votre trouvaille peut manquer de -mindepth ou -delete prédicat, auquel cas vous pourriez faire:

find images/. ! -name . -Prune -exec rm -rf {} +
54
user unknown

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

  • utilisation ls -Ab pour faire correspondre tous les fichiers/répertoires

    cd dir_name && rm -rf `ls -Ab`
    
  • utilisez find pour faire correspondre tous les fichiers/répertoires

    find dir_name -mindepth 1 -delete
    

    ou, si votre find ne prend pas en charge -delete:

    find dir_name -mindepth 1 -exec rm -rf {}
    
  • supprimez le dossier, puis recréez-le

    rm -rf dir_name && mkdir dir_name
    
  • en bash,

    shopt -s dotglob  
    rm -rf dir_name/*
    
21
zeekvfu

Pour supprimer tous les fichiers réguliers de manière récursive dans un répertoire, cette commande (en supposant GNU ou FreeBSD find) est assez bonne:

find . -type f -delete

Cela laisse tous les fichiers non réguliers comme des liens symboliques (qu'ils pointent vers des fichiers normaux ou non), des répertoires, des fifos, des sockets, des périphériques ...

Voir également:

find . ! -type d -delete

pour supprimer des fichiers de tout type sauf répertoire.

11
amit singh

Essayez cette version:

 rm -r test/*
6
demas

J'utilise la commande find ici:

Étape 1: Trouvez tous les fichiers et supprimez-les:

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

Exemple:

find /home/user/Desktop/images/ -type f -exec rm {} \;

Étape 2: Trouvez tous les sous-répertoires et supprimez-les:

find /path/to/directory/ -type d -exec rm -R {} \;
3
Mandar Shinde

La question était de vider un répertoire = supprimer le contenu d'un répertoire, y compris les fichiers cachés, mais pas le répertoire lui-même. La commande find avec -mindepth 1 est en fait la bonne façon de procéder, mais pour éviter les messages d'erreur, elle doit être jointe avec -maxdepth 1:

find /path/to/dir -mindepth 1 -maxdepth 1 -exec rm -rf '{}' \;
3
Maddes

la syntaxe de rm est:

rm [OPTION]... FILE...

Vous devez donc indiquer explicitement le chemin approprié, par exemple.

rm -r sub_dir/
0
Zaur Nasibov

Vous pouvez supprimer le répertoire à l'aide de la commande suivante:

Sudo rm -r directoryname1/2/3/*

Il supprimera tout le répertoire après 3/*.

Exemple Sudo rm -r Téléchargements/chanson/*

Ce sera supprimer tous les fichiers qui sont dans Downloads/song.

0

Cela fonctionne parfaitement pour moi, testé plusieurs variantes travaillées à chaque fois.

À partir du répertoire contenant le répertoire images.

rm -frd ./images/*

avant:

images/
    |_ header.png
    |_ footer.png
    |_ subdir/

après:

images/
0
deb-linux-user

Pour supprimer tous les fichiers et sous-répertoires du répertoire courant, y compris ceux cachés, sans message d'erreur :

rm -rf .[^.] .??* *

Ou, à partir du répertoire parent:

rm -rf images/.[^.] images/.??* images/*

De https://serverfault.com/a/47940/269538 .

0
this

Une autre option:

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

source: https://askubuntu.com/a/552834/56648

0
Eyal Levin