Comment lister les dossiers vides en PowerShell ?
I. Présentation
Dans un précédent article, nous avions vu comment vérifier si un dossier est vide en PowerShell. Aujourd'hui, nous allons voir comment lister les dossiers vides en PowerShell. Imaginons prendre le dossier "C:\DATA" et demander à PowerShell de lister tous les dossiers vides sous cette racine, de façon récursive ou seulement les dossiers du premier niveau.
II. Lister les dossiers vides
Pour cet exemple, j'ai créé quelques dossiers au sein du dossier "DATA". Seul le dossier "Dossier4" est vide, les autres contiennent des fichiers et/ou des dossiers.
L'idée va être de lister les éléments du dossier "C:\DATA" avec la commande suivante :
Get-ChildItem "C:\DATA" -Directory
Nous allons ensuite ajouter deux filtres via Where-Object, grâce aux méthodes GetFiles() et GetDirectories(), qui permettent respectivement d'obtenir la liste des fichiers et la liste des dossiers. A chaque fois, nous allons vérifier si le nombre de fichiers et de fichiers est égal à zéro (grâce à Count) : si c'est le cas, le dossier est vide.
En guise de résultat, nous allons afficher le chemin complet vers le dossier grâce à la propriété FullName :
Get-ChildItem "C:\DATA" -Directory | Where-Object -FilterScript {($_.GetFiles().Count -eq 0) -and $_.GetDirectories().Count -eq 0} | Select-Object -ExpandProperty FullName
Ce qui donne :
Enfin, si l'on veut supprimer tous les dossiers vides, on ajoute "Remove-Item" à la fin de la commande :
Get-ChildItem "C:\DATA" -Directory | Where-Object -FilterScript {($_.GetFiles().Count -eq 0) -and $_.GetDirectories().Count -eq 0} | Select-Object -ExpandProperty FullName | Remove-Item
La commande que l'on a vue jusqu'ici permet de récupérer les dossiers vides de premier niveau. Si l'on veut ajouter la récursivité à cette recherche, on va simplement ajouter le paramètre -Recurse à la commande Get-ChildItem.
Ce qui donne :
Get-ChildItem "C:\DATA" -Directory -Recurse | Where-Object -FilterScript {($_.GetFiles().Count -eq 0) -and $_.GetDirectories().Count -eq 0} | Select-Object -ExpandProperty FullName
Il ne vous reste plus qu'à enregistrer cette commande dans un fichier PS1 nommé Get-EmptyFolders pour la garder de côté ?