obtenir la taille approximative du répertoire (en incluant récursivement tous les fichiers et sous-répertoires)

10

Existe-t-il un moyen d'obtenir rapidement une taille précise pour un répertoire (y compris, récursivement, tous ses sous-répertoires)? Je ne veux pas les tailles des sous-répertoires, je veux juste dire qu'elles devraient être récursivement incluses dans la taille totale rapportée.

A défaut, un moyen d'obtenir une taille approximative? Je pense que quelque chose dans le sens de dfcela produit une réponse rapide pour l'ensemble du système de fichiers, mais cette fois pour un répertoire spécifique (et ses sous-répertoires).

Les solutions utilisant dusemblent prendre du temps lorsqu'un répertoire donné contient des milliers de sous-répertoires.

Marcus Junius Brutus
la source
L'utilisation duest la seule méthode que je connaisse. Le problème est que les données sont réparties dans toute la hiérarchie et doivent donc être compilées par un outil pour obtenir les chiffres.
slm

Réponses:

15

Je trouve que c'est assez utile.

du -sm Directory

ou pour obtenir une ventilation des répertoires internes

du -sm Directory/*

puis avec une sorte s'il a beaucoup de sous-répertoires

du -sm Directory/* | sort -n 

La raison pour laquelle j'utilise l'option -m est de m'assurer d'obtenir une sortie en mégaoctets. Je trouve que c'est plus facile pour moi de comparer visuellement (lorsque je n'obtiens pas un mélange d'unités, par exemple comparer 999 Ko et 1 Mo contre 999000 Mo et 1000000 Mo), l'avantage supplémentaire est que vous pouvez passer la sortie en tri.

Mettez tout cela en arrière-plan et redirigez la sortie, cela va prendre du temps quelle que soit la méthode utilisée, c'est une traversée de nombreux fichiers qui prendra du temps.

du -sm Directory/* | sort -nr > ~/cacheDu.log &

Notez le tri inverse pour que les gros soient au début. Ajoutez ceci au cron run toutes les n minutes.

Ensuite, avec un alias ducache, vous avez une utilisation assez récente du répertoire.

export alias ducache='head -n 15 ~/cacheDu.log'
X Tian
la source
@X Tian voir mon commentaire sur la réponse de glenn jackman
Marcus Junius Brutus
Accepté, c'est pourquoi j'utilise -m et tri
X Tian
3
N'oubliez pas shopt -s dotglob, sinon du -sm Directory/*ne comptera pas les fichiers / répertoires cachés.
Dmitry Grigoryev
@XTian désolé mais je n'ai pas pu le faire, donc certaines commandes peuvent aider.
Maveň ツ
Je l'ai eu d' ici
Maveň ツ
5
du -sh "$dir"

vous donnera un résumé de la taille totale de la sortie au format "humain".


Puisque vous cherchiez une alternative à du, j'ai essayé find, mais c'est exactement la même chose:

$ find . -printf "%s\n" | { 
    sum=0
    while read size; do ((sum+=size)); done
    echo $sum
}
122865202884
$ du -sb .
122865202884    .
glenn jackman
la source
Merci, j'en suis conscient mais cela duprend beaucoup trop de temps car cela produit un résultat précis. J'espérais un outil / commande qui fournit une réponse approximative rapide et n 'sale.
Marcus Junius Brutus
Il n'y a dfque cela qui fonctionne sur l'ensemble du système de fichiers.
glenn jackman
1

Vous n'aimerez peut-être pas ma réponse, mais je pense que la meilleure façon de faire ce que vous voulez est d'exécuter régulièrement les "du -s" en arrière-plan en utilisant cron et de stocker le résultat dans un fichier. Ensuite, lorsque vous souhaitez une valeur approximative, utilisez la valeur du fichier. Vous pouvez décider de la fréquence d'exécution du du. Je ne vois pas de moyen plus rapide d'obtenir la valeur. La commande du est efficace pour ce qu'elle fait.

La seule autre façon de procéder très rapidement est de créer un système de fichiers pour le répertoire, puis df vous obtiendra très rapidement la réponse que vous souhaitez.

S'il est plus rapide de tout savoir sur le système de fichiers sauf votre répertoire, vous pouvez exécuter df pour le système de fichiers, du pour tout autre que votre répertoire et soustraire.

Robert Jacobs
la source
0

Il ne correspond pas exactement à vos besoins (pas d'impression sur une ligne) mais est plus facile que d'autres solutions:

du -a -h | sort -hr | head -2

Cette commande vous donnera la taille du répertoire et du sous-répertoire et la taille du plus gros fichier ou sous-répertoire du répertoire courant.

PS: head -2c'est dans le cas où un sous-répertoire prend toute la place du répertoire courant et est à l'écoute avant le courant.

Nodulaire
la source