La dir
commande de liste de répertoires Windows comporte une ligne à la fin indiquant la quantité totale d’espace occupé par les fichiers répertoriés. Par exemple, dir *.exe
affiche tous les .exe
fichiers du répertoire en cours, leurs tailles et la somme totale de leurs tailles. J'adorerais avoir une fonctionnalité similaire avec mon dir
alias dans bash, mais je ne sais pas exactement comment s'y prendre.
Actuellement, j'ai alias dir='ls -FaGl'
dans mon .bash_profile
, montrant
drwxr-x---+ 24 mattdmo 4096 Mar 14 16:35 ./
drwxr-x--x. 256 root 12288 Apr 8 21:29 ../
-rw------- 1 mattdmo 13795 Apr 4 17:52 .bash_history
-rw-r--r-- 1 mattdmo 18 May 10 2012 .bash_logout
-rw-r--r-- 1 mattdmo 395 Dec 9 17:33 .bash_profile
-rw-r--r-- 1 mattdmo 176 May 10 2012 .bash_profile~
-rw-r--r-- 1 mattdmo 411 Dec 9 17:33 .bashrc
-rw-r--r-- 1 mattdmo 124 May 10 2012 .bashrc~
drwx------ 2 mattdmo 4096 Mar 24 20:03 bin/
drwxrwxr-x 2 mattdmo 4096 Mar 11 16:29 download/
par exemple. En prenant les réponses de cette question :
dir | awk '{ total += $4 }; END { print total }'
ce qui me donne le total, mais n'imprime pas le répertoire lui-même. Existe-t-il un moyen de modifier cela en un script one-liner ou shell afin que je puisse transmettre tous les ls
arguments que je souhaite dir
et obtenir une liste complète plus le total? Par exemple, j'aimerais exécuter dir -R *.jpg *.tif
la liste et la taille totale de ces types de fichiers dans tous les sous-répertoires. Idéalement, ce serait bien si je pouvais obtenir la taille de chaque sous-répertoire, mais ce n'est pas essentiel.
la source
ls -lh
pas? Il imprime la somme totale en haut. Vous pouvez également exécuterdu -sh *.exe
pour obtenir des informations d'utilisation de l'espace disque sous une forme lisible par l'homme.ls -lh
imprime, mais ce n'est pas toujours lié à ce que lesawk
scripts ci-dessous calculent, ni à ce que j'ajoute à la main. Parfois, il est proche du nombre de Ko de fichiers dans le répertoire, mais cela ne semble pas tenir compte de la taille allouée des sous-répertoires. Je vous serais reconnaissant de m'indiquer une explication exacte de ce nombre ...ls -lh
ne montre pas le total de la taille d'unRéponses:
La fonction suivante fait la plupart de ce que vous demandez:
... mais cela ne vous donnera pas ce que vous demandez
dir -R *.jpg *.tif
, car ce n'est pas comme ça que çals -R
marche. Vous voudrez peut-être jouer avec l'find
utilitaire pour cela.la source
dir
est déjà le nom d’un coreutil populaire, je préférerais ne pas nommer une fonction comme celle-là.Il existe déjà une commande UNIX pour cela:
du
Il suffit de faire:
Selon la convention, vous pouvez ajouter un ou plusieurs chemins de fichier ou de répertoire à la fin de la commande.
-h
est une extension permettant de convertir la taille en un format convivial,-a
qui vous donne la taille "apparente" (taille du fichier au lieu de l'utilisation du disque) et qui-c
donne un total à la fin.la source
du
donne l'utilisation du disque, pas la somme des tailles de fichiers.du -h
ne résume pas la taille des fichiers qui lui sont transmis.du -h *.so
affiche la taille de chaque fichier, mais pas la somme. Je pense que ce que vous voulez ici estdu -hc *.so
(ou mêmedu -hc *.so | tail -1
). Mais bien sûr, il veut aussi la liste des répertoires.-a
des moyens--all
. Considérez plutôt utiliser--apparent-size
Vous pouvez utiliser
du -h -c directory|tail -1
Cela générera une seule ligne avec l'utilisation de la mémoire.
la source
du -hs directory
si vous voulez seulement le total.Imprimez simplement la ligne courante que vous additionnez:
la source
avec perl:
Taille de tous les fichiers PDF non masqués dans le répertoire actuel.
la source
Ajouter ce qui suit à .bash_profile ou .bashrc fonctionne pour moi.
Maintenant, quand je fais un dir * .mp3, il le fait de manière récursive et affiche le total à la fin. Vous pouvez contrôler la profondeur souhaitée en ajoutant un paramètre maxdepth à la recherche. Je sais que courir deux fois n’est pas une idée très efficace. Mais je ne pouvais pas penser à un meilleur moyen. Au moins, le travail est fait.
la source
En utilisant du et une déclaration awk comme celle mentionnée ci-dessus, vous obtiendrez ce que vous recherchez.
Exemple:
du /home/abc/Downloads/*.jpg | awk '{ print; total += $1 }; END { print "total size: ",total }'
Ceci listera tous les fichiers du dossier Téléchargements de l'utilisateur abc se terminant par .jpg et affichera la somme de tous ces fichiers à la fin de la liste.
la source
Pour obtenir à la fois une sortie dir et un calcul de taille, sans utiliser aucune des autres options proposées, vous pouvez utiliser tee (1) et la substitution de processus ...
la source
tee
, c'est justedir | awk '{print; total += $4}; END {print total}'
la source
linux sum human readable sizes
et c'est ce que je recherche.la source