Question Taille d'un dossier

Plus d'informations
il y a 13 ans 11 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 ;)

Connexion ou Créer un compte pour participer à la conversation.

Plus d'informations
il y a 13 ans 11 mois #366 par Robin Lemesle
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]

Robin MVP PowerShell

Connexion ou Créer un compte pour participer à la conversation.

Plus d'informations
il y a 13 ans 11 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

Connexion ou Créer un compte pour participer à la conversation.

Plus d'informations
il y a 13 ans 11 mois #368 par Robin Lemesle
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 :P

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.

Plus d'informations
il y a 13 ans 4 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 ! :whistle:

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.

Plus d'informations
il y a 13 ans 4 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(\&quot;*.*\&quot;,\&quot;AllDirectories\&quot;«») | 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.149 secondes
Propulsé par Kunena