Question
Taille d'un dossier
- Fréd
- Auteur du sujet
- Hors Ligne
- Nouveau membre
-
Réduire
Plus d'informations
- Messages : 11
- Remerciements reçus 0
il y a 16 ans 4 mois #365
par Fréd
Taille d'un dossier a été créé par Fréd
Bijour,
Dans la lignée je trouve pas le truc qui me permet de finir mon script, voici une p'tit question pour vous les gars.
Je cherche donc un moyen pour calculer la taille d'un dossier (donc j'entends par là l'entier du dossier avec ces sous dossiers et tout). J'imagine que ça doit tourner autour de qqch comme Get-WmiObject Win32_Directory...
Comme d'hab, merci pour vos réponses
Dans la lignée je trouve pas le truc qui me permet de finir mon script, voici une p'tit question pour vous les gars.
Je cherche donc un moyen pour calculer la taille d'un dossier (donc j'entends par là l'entier du dossier avec ces sous dossiers et tout). J'imagine que ça doit tourner autour de qqch comme Get-WmiObject Win32_Directory...
Comme d'hab, merci pour vos réponses

Connexion ou Créer un compte pour participer à la conversation.
- Robin Lemesle
- Hors Ligne
- Modérateur
-
Réduire
Plus d'informations
- Messages : 260
- Remerciements reçus 0
il y a 16 ans 4 mois #366
par Robin Lemesle
Robin MVP PowerShell
Réponse de Robin Lemesle sur le sujet Re:Taille d'un dossier
Salut !
je n'ai pas testé mais essaies ca !
[code:1]
$Total = 0
Get-childItem -recurse | foreach-object { $Total += $_.length }
$Total /= (1024*1024)
write-host \"$Total Mo\"
[/code:1]
je n'ai pas testé mais essaies ca !
[code:1]
$Total = 0
Get-childItem -recurse | foreach-object { $Total += $_.length }
$Total /= (1024*1024)
write-host \"$Total Mo\"
[/code:1]
Robin MVP PowerShell
Connexion ou Créer un compte pour participer à la conversation.
- Fréd
- Auteur du sujet
- Hors Ligne
- Nouveau membre
-
Réduire
Plus d'informations
- Messages : 11
- Remerciements reçus 0
il y a 16 ans 4 mois #367
par Fréd
Réponse de Fréd sur le sujet Re:Taille d'un dossier
Ouais ça la fait. Vais partir avec ça et customizer la chose.
Merci pour ta réponse Robin
<br><br>Message édité par: niniel, à: 16/05/07 14:38
Merci pour ta réponse Robin

Connexion ou Créer un compte pour participer à la conversation.
- Robin Lemesle
- Hors Ligne
- Modérateur
-
Réduire
Plus d'informations
- Messages : 260
- Remerciements reçus 0
il y a 16 ans 4 mois #368
par Robin Lemesle
oui, il faut approfondir la chose
je pense que je vais en faire un script pour la Bibliothèque.
Donc si tu veux y apporter le tiens (script), ne te gênes pas.
De rien
Robin MVP PowerShell
Réponse de Robin Lemesle sur le sujet Re:Taille d'un dossier
Ouais ça la fait. Vais partir avec ça et customizer la chose.
oui, il faut approfondir la chose

je pense que je vais en faire un script pour la Bibliothèque.
Donc si tu veux y apporter le tiens (script), ne te gênes pas.
Merci pour ta réponse Robin
De rien
Robin MVP PowerShell
Connexion ou Créer un compte pour participer à la conversation.
- pgu
- Hors Ligne
- Nouveau membre
-
Réduire
Plus d'informations
- Messages : 17
- Remerciements reçus 0
il y a 15 ans 9 mois #1325
par pgu
Réponse de pgu sur le sujet Re:Taille d'un dossier
Voilà pour ma part mon petit bout de script qui utilise la méthode recursive (plus un petit formatage à la fin):
Get-ChildItem -recurse $LogFolder | foreach-object { $LogDirSize += $_.length }
$LogDirSize = ([math]::round($LogDirSize/1MB,2))
avec vous l'aurez deviné:
$LogFolder: le dossier à mesurer
$LogDirSize : ma valeur calculée
Cela marche... MAIS
J'ai un problème de temps d'execussion de ce script sur des arborescences contenant beaucoup de répertoire et de fichiers !
Dans mon cas j'ai beaucoup de petits fichiers. C'est donc cette methode récursive qui me pénalise.
dans mon cas, j'ai environ 15 000 000 de fichiers !
Ma question est la suivante: auriez vous une méthode pour obtenir directement la taille d'un répertoire (contenant d'autre sous répertoires) sans utiliser le comptage de tous les fichiers ?
Get-ChildItem -recurse $LogFolder | foreach-object { $LogDirSize += $_.length }
$LogDirSize = ([math]::round($LogDirSize/1MB,2))
avec vous l'aurez deviné:
$LogFolder: le dossier à mesurer
$LogDirSize : ma valeur calculée
Cela marche... MAIS
J'ai un problème de temps d'execussion de ce script sur des arborescences contenant beaucoup de répertoire et de fichiers !
Dans mon cas j'ai beaucoup de petits fichiers. C'est donc cette methode récursive qui me pénalise.
dans mon cas, j'ai environ 15 000 000 de fichiers !

Ma question est la suivante: auriez vous une méthode pour obtenir directement la taille d'un répertoire (contenant d'autre sous répertoires) sans utiliser le comptage de tous les fichiers ?
Connexion ou Créer un compte pour participer à la conversation.
- Jacques Barathon
- Hors Ligne
- Administrateur
-
Réduire
Plus d'informations
- Messages : 576
- Remerciements reçus 0
il y a 15 ans 9 mois #1326
par Jacques Barathon
Réponse de Jacques Barathon sur le sujet Re:Taille d'un dossier
Je n'ai pas l'impression qu'il y ait une méthode directe. L'Explorateur lui-même repose sur un comptage fichier par fichier. Pour qu'il y ait une méthode directe, il faudrait qu'un compteur soit automatiquement incrémenté au niveau de chaque répertoire de chaque arborescence à chaque fois qu'un fichier est ajouté, modifié ou supprimé n'importe où dans l'arborescence, ce dont je doute.
J'ai essayé rapidement deux autres méthodes, mais elles ont donné des résultats plus lents sur mon poste. Regarde si éventuellement ça marche mieux chez toi:
1. Utilisation de measure-object à la place d'un compteur perso
[code:1]dir $LogFolder -recurse | measure-object length -sum[/code:1]
2. Utilisation de la classe System.IO.DirectoryInfo
[code:1]
$root = new-object System.IO.DirectoryInfo $LogFolder
$root.GetFiles(\"*.*\",\"AllDirectories\"«») | measure-object length -sum[/code:1]
Il y a sans doute moyen de faire à peu près la même chose avec WMI, il faudrait jongler avec des classes que je ne connais pas assez bien.
Sinon, la lenteur de PowerShell en la matière étant en grande partie dûe à l'obligation de collecter et de reconstruire des infos complètes sur chaque objet, on peut aussi s'appuyer sur CMD.EXE qui ne s'embarrasse pas de tout ça:
[code:1]
(cmd /c dir $LogFolder /-c /s)[-2].Split()[-2][/code:1]
Cela dit, sur 15 millions de lignes, ça risque de faire mal...
Malheureusement, de l'aveu même de l'équipe PowerShell, la v1 n'a pas été optimisée côté performances. Il faudra tester les mêmes commandes avec la v2 pour voir s'il y a du progrès.
Janel
J'ai essayé rapidement deux autres méthodes, mais elles ont donné des résultats plus lents sur mon poste. Regarde si éventuellement ça marche mieux chez toi:
1. Utilisation de measure-object à la place d'un compteur perso
[code:1]dir $LogFolder -recurse | measure-object length -sum[/code:1]
2. Utilisation de la classe System.IO.DirectoryInfo
[code:1]
$root = new-object System.IO.DirectoryInfo $LogFolder
$root.GetFiles(\"*.*\",\"AllDirectories\"«») | measure-object length -sum[/code:1]
Il y a sans doute moyen de faire à peu près la même chose avec WMI, il faudrait jongler avec des classes que je ne connais pas assez bien.
Sinon, la lenteur de PowerShell en la matière étant en grande partie dûe à l'obligation de collecter et de reconstruire des infos complètes sur chaque objet, on peut aussi s'appuyer sur CMD.EXE qui ne s'embarrasse pas de tout ça:
[code:1]
(cmd /c dir $LogFolder /-c /s)[-2].Split()[-2][/code:1]
Cela dit, sur 15 millions de lignes, ça risque de faire mal...
Malheureusement, de l'aveu même de l'équipe PowerShell, la v1 n'a pas été optimisée côté performances. Il faudra tester les mêmes commandes avec la v2 pour voir s'il y a du progrès.
Janel
Connexion ou Créer un compte pour participer à la conversation.
Temps de génération de la page : 0.053 secondes
- Vous êtes ici :
-
Accueil
-
forum
-
PowerShell
-
Entraide pour les débutants
- Taille d'un dossier