71 votes

Comment supprimer tous les répertoires vides d'un répertoire à partir de la ligne de commande ?

Disons que j'ai un répertoire nommé foo/ . Ce dossier comprend des sous-répertoires. Comment puis-je supprimer tous les répertoires vides en une seule commande ?

147voto

boxoft Points 333

Essayez cette commande :

find . -empty -type d -delete

Le site find est utilisée pour rechercher les fichiers/répertoires correspondant à un critère de recherche particulier à partir du chemin d'accès spécifié, dans ce cas le répertoire courant (d'où la commande . ).

Le site -empty L'option est valable pour tout fichier et répertoire vide.

Le site -type d est valable pour l'option Datei spécifié ; dans ce cas d représente le type de fichier répertoire .

Le site -delete est l'action à effectuer, et s'applique à tous les fichiers trouvés dans la recherche.

13voto

waltinator Points 32821

Vous pouvez profiter de la rmdir le refus de la commande de supprimer les répertoires non vides, et les find -depth pour parcourir l'arborescence du répertoire de bas en haut :

find . -depth -exec rmdir {} \;  

(et ignorer les erreurs), ou ajouter 2>/dev/null pour vraiment les ignorer.

Le site -depth option pour find commence à trouver au bas de l'arborescence du répertoire.

rm -rf supprimera tous les fichiers dans le répertoire (et ses sous-répertoires, et ....) ET toutes les répertoires et tout.

8voto

evilsoup Points 4265
rmdir *

Supprime tous les répertoires vides. Il affichera une erreur pour chaque répertoire et fichier non vide, pour empêcher ces erreurs d'encombrer votre terminal, utilisez

rmdir * 2> /dev/null

3voto

Simon Baars Points 131
find . -type d -empty -delete -maxdepth 1

Car si vous ne voulez supprimer que les sous-répertoires directs de foo/ .

0voto

Sergiy Kolodyazhnyy Points 97292

Approche Python

$ tree                                                                                                                                                                                  
.
 empty_dir1
 empty_dir2
 subdir1
    file1.abc
    file2.abc
 subdir2
     file1.abc
     file2.abc

4 directories, 4 files
$ python -c 'import os;empty=[r for r,s,f in os.walk(".") if not f and not s and r != "." ];map(lambda x: os.rmdir(x),empty)'
$ tree
.
 subdir1
    file1.abc
    file2.abc
 subdir2
     file1.abc
     file2.abc

Cela fonctionne comme suit :

  • nous utilisons os.walk() pour parcourir récursivement l'arbre des répertoires. A chaque itération r est défini comme le dossier actuel auquel nous accédons, s contient la liste des répertoires dans r y f contiendra la liste des fichiers de ce dossier. Bien entendu, si f y s sont vides, nous savons que r est vide.
  • La première liste de compréhension nous permet de créer empty la liste de tous les répertoires qui sont vides, sur la base de l'évaluation mentionnée ci-dessus.
  • deuxième fonction, map() est utilisé pour effectuer os.rmdir() sur chaque élément de empty liste. La compréhension de la liste peut être utilisée comme une alternative.

En tant que script, ce serait ainsi :

#!/usr/bin/env python
import os
empty=[]
for r,s,f in os.walk("."):
    if not f and not s and r != ".":
        empty.append(r)

for i in empty:
    os.rmdir(i)

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