Lorsque j'utilise ls
ou du
, j'obtiens la quantité d'espace disque occupée par chaque fichier.
J'ai besoin de la somme totale de toutes les données des fichiers et sous-répertoires que j'obtiendrais si j'ouvrais chaque fichier et comptais les octets. Des points bonus si je peux l'obtenir sans ouvrir chaque fichier et sans compter.
ls
affiche en fait le nombre d'octets dans chaque fichier, pas la quantité d'espace disque. Est-ce suffisant pour vos besoins?du
cela ne peut pas être utilisé pour répondre à cette question. Il montre la quantité d'espace disque que le répertoire occupe sur le disque (les données des fichiers plus la taille des méta-informations du système de fichiers auxiliaire). Ladu
sortie peut être encore plus petite que la taille totale de tous les fichiers. Cela peut se produire si le système de fichiers peut stocker des données compressées sur le disque ou si des liens physiques sont utilisés. Les bonnes réponses sont basées surls
etfind
. Voir les réponses de Nelson et de bytepan ici, ou cette réponse: unix.stackexchange.com/a/471061/152606Réponses:
Si vous voulez la 'taille apparente' (c'est-à-dire le nombre d'octets dans chaque fichier), pas la taille occupée par les fichiers sur le disque, utilisez l' option
-b
ou--bytes
(si vous avez un système Linux avec GNU coreutils ):la source
du -shb
(comme suggéré par cette réponse), le-b
paramètre semble remplacer le-h
paramètre.du -sh --apparent-size /dir/
Utilisez
du -sb
:En option, ajoutez l'
h
option pour une sortie plus conviviale:la source
brew install coreutils
. Il sera disponible en tant que commandegdu
.ls
->file.gz hardlink-to-file.gz
.stat -c %s file.gz
->9657212
.stat -c %s hardlink-to-file.gz
->9657212
.du -sb
->9661308
. Ce n'est certainement pas la taille totale du contenu, mais la taille que le répertoire occupe sur le disque.cd dans le répertoire, puis:
ftw!
A l'origine écrit à ce sujet ici: https://ao.gl/get-the-total-size-of-all-the-files-in-a-directory/
la source
-L
option quidu
suit les liens symboliques.Juste une alternative:
grep -v '^d'
exclura les répertoires.la source
ls -lR | grep '.png$' | awk '{total += $5} END {print "Total:", total/1024/1024, "MB"}'
du
cette solution, compte vraiment la taille totale de toutes les données dans les fichiers comme si elles étaient ouvertes une par une et que leurs octets étaient comptés. Mais oui, l'ajout du-A
paramètre est également nécessaire pour compter les fichiers cachés.Le format "% s" de stat vous donne le nombre réel d'octets dans un fichier.
N'hésitez pas à remplacer votre méthode préférée pour la somme des nombres .
la source
find -print0
etxargs -0
sont nécessaires pour les noms de fichiers avec des espaces. OS X veutstat -f %z
.du
rapports.)du
utilitaire, cette réponse est correcte. Il est très similaire de répondre ici: unix.stackexchange.com/a/471061/152606 . Mais j'utiliserais! -type d
au lieu de-type f
pour compter également les liens symboliques (la taille du lien symbolique lui-même (généralement quelques octets), pas la taille du fichier vers lequel il pointe).Si vous utilisez "du" de busybox dans le système emebedded, vous ne pouvez pas obtenir un octet exact avec du, seulement des Ko que vous pouvez obtenir.
la source
Lorsqu'un dossier est créé, de nombreux systèmes de fichiers Linux allouent 4096 octets pour stocker des métadonnées sur le répertoire lui-même. Cet espace est augmenté d'un multiple de 4 096 octets à mesure que le répertoire se développe.
la commande du (avec ou sans l'option -b) prend en compte cet espace , comme vous pouvez le voir en tapant:
vous aurez un résultat de 4096 octets pour un répertoire vide. Donc, si vous mettez 2 fichiers de 10000 octets dans le répertoire, le montant total donné par du -sb serait de 24096 octets.
Si vous lisez attentivement la question, ce n'est pas ce qui vous a été demandé. Le questionneur a demandé:
que dans l'exemple ci-dessus doit être de 20000 octets, et non de 24096.
Ainsi, la réponse correcte à mon humble avis pourrait être un mélange de réponse de Nelson et de suggestion hlovdal pour gérer les noms de fichiers contenant des espaces:
la source
Il y a au moins trois façons d'obtenir la «somme totale de toutes les données des fichiers et sous-répertoires» en octets qui fonctionnent à la fois sous Linux / Unix et Git Bash pour Windows, répertoriées ci-dessous dans l'ordre du plus rapide au plus lent en moyenne. Pour votre information, ils ont été exécutés à la racine d'un système de fichiers assez profond (
docroot
dans une installation Magento 2 Enterprise comprenant 71.158 fichiers dans 30.027 répertoires).1.
2.
3.
Ces deux méthodes fonctionnent également, mais elles reposent sur des commandes qui n'existent pas sur Git Bash pour Windows:
1.
2.
Si vous ne voulez que le total du répertoire actuel, ajoutez
-maxdepth 1
àfind
.Notez que certaines des solutions suggérées ne renvoient pas de résultats précis, je m'en tiendrai donc aux solutions ci-dessus.
la source
dc
fait partie dubc
package, donc pour l'obtenir,dc
il est nécessaire d'installerbc
.Pour Win32 DOS, vous pouvez:
c:> dir / sc: \ répertoire \ vous \ voulez
et l'avant-dernière ligne vous dira combien d'octets les fichiers prennent.
Je sais que cela lit tous les fichiers et répertoires, mais fonctionne plus rapidement dans certaines situations.
la source
du
est pratique, maisfind
est utile dans le cas où vous souhaitez calculer la taille de certains fichiers uniquement (par exemple, en utilisant le filtre par extension). Notez égalementfind
qu'ils peuvent eux - mêmes imprimer la taille de chaque fichier en octets. Pour calculer une taille totale, nous pouvons connecter ladc
commande de la manière suivante:Ici
find
génère une séquence de commandesdc
similaires123 + 456 + 11 +
. Cependant, le programme terminé devrait être comme0 123 + 456 + 11 + p
(rappelez-vous la notation postfixe).Donc, pour obtenir le programme terminé, nous devons mettre
0
sur la pile avant d'exécuter la séquence à partir de stdin, et imprimer le nombre supérieur après l'exécution (lap
commande à la fin). Nous y parvenons via desdc
options:-e0
est juste un raccourci pour-e '0'
cela met0
sur la pile,-f-
est pour lire et exécuter les commandes de stdin (celles générées parfind
ici),-ep
est pour imprimer le résultat (-e 'p'
).Pour imprimer la taille en MiB comme
284.06 MiB
nous pouvons utiliser-e '2 k 1024 / 1024 / n [ MiB] p'
au point 3 à la place (la plupart des espaces sont facultatifs).la source
Cela peut aider:
La commande ci-dessus totalisera tous les fichiers quittant la taille des répertoires.
la source
-A
option doit être ajoutée àls
.Utilisation:
Où <DIR> est le répertoire que vous souhaitez inspecter.
Le «-c» vous donne le grand total des données qui sont extraites à l'aide de la partie «grep total» de la commande, et le décompte en Ko est extrait avec la commande awk.
La seule mise en garde ici est que si vous avez un sous-répertoire contenant le texte "total", il sera également craché.
la source