Question Utiliser ls pour lister les répertoires et leurs tailles totales


Est-il possible d'utiliser ls dans Unix pour lister la taille totale d'un sous-répertoire et tout son contenu par opposition à l'habituel 4K qui (je suppose) est juste le répertoire lui-même? C'EST À DIRE.

total 12K
drwxrwxr-x  6 *** *** 4.0K 2009-06-19 10:10 branches
drwxrwxr-x 13 *** *** 4.0K 2009-06-19 10:52 tags
drwxrwxr-x 16 *** *** 4.0K 2009-06-19 10:02 trunk

Après avoir récuré les pages de manuel, j'arrive vide.


615
2018-06-19 17:29


origine


Réponses:


Essayez quelque chose comme:

du -sh *

version courte de:

du --summary --human-readable *

Explication:

du: isk Usauge

-s: Affiche un résumé pour chaque fichier spécifié. (Équivalent à -d 0)

-h: Sortie "lisible par l'homme". Utiliser les suffixes d'unité: Byte, Kibibyte (KiB), Mebibyte (MiB), gibibyte (GiB), Tebibyte (TiB) et PEbibyte (PiB). (BASE2)


1162
2018-06-19 17:30



du -sk * | sort -n triera les dossiers par taille. Utile en cherchant à dégager l'espace ..


253
2018-04-09 08:50



du -sh * | sort -h

Cela sera affiché dans un format lisible par l'homme.


75
2017-11-08 17:16



Pour lister les plus grands répertoires du répertoire courant au format lisible par l'homme:

du -sh * | sort -hr

Une meilleure façon de limiter le nombre de lignes peut être

du -sh * | sort -hr | head -n10

Où vous pouvez augmenter le suffixe de -n indicateur pour limiter le nombre de lignes répertoriées

Échantillon:

[~]$ du -sh * | sort -hr
48M app
11M lib
6.7M    Vendor
1.1M    composer.phar
488K    phpcs.phar
488K    phpcbf.phar
72K doc
16K nbproject
8.0K    composer.lock
4.0K    README.md

Cela le rend plus pratique à lire :)


23
2017-08-16 22:36



Pour l'afficher dans ls -lh format, utilisez:

(du -sh ./*; ls -lh --color=no) | awk '{ if($1 == "total") {X = 1} else if (!X) {SIZES[$2] = $1} else { sub($5 "[ ]*", sprintf("%-7s ", SIZES["./" $9]), $0); print $0} }'

Code Awk expliqué:

if($1 == "total") { // Set X when start of ls is detected
  X = 1 
} else if (!X) { // Until X is set, collect the sizes from `du`
  SIZES[$2] = $1
} else {
  // Replace the size on current current line (with alignment)
  sub($5 "[ ]*", sprintf("%-7s ", SIZES["./" $9]), $0); 
  print $0
}

Sortie de l'échantillon:

drwxr-xr-x 2 root     root 4.0K    Feb 12 16:43 cgi-bin
drwxrws--- 6 root     www  20M     Feb 18 11:07 document_root
drwxr-xr-x 3 root     root 1.3M    Feb 18 00:18 icons
drwxrwsr-x 2 localusr www  8.0K    Dec 27 01:23 passwd

21
2018-02-18 11:38



La commande que vous voulez est 'du -sk' du = "utilisation du disque"

L'indicateur -k vous donne la sortie en kilo-octets, plutôt que la valeur par défaut des secteurs de disque (blocs de 512 octets).

L'indicateur -s répertorie uniquement les éléments dans le répertoire de niveau supérieur (c'est-à-dire, le répertoire actuel, par défaut, ou le répertoire spécifié sur la ligne de commande). Il est étrange que Du ait le comportement inverse de ls à cet égard. Par défaut, du vous donnera récursivement l'utilisation du disque de chaque sous-répertoire. En revanche, ls ne donnera que des fichiers de liste dans le répertoire spécifié. (ls -R vous donne un comportement récursif.)


20
2018-06-22 21:29



Mettez cette déclaration de fonction shell dans les scripts d'initialisation de votre shell:

function duls {
    paste <( du -hs -- "$@" | cut -f1 ) <( ls -ld -- "$@" )
}

Je l'ai appelé duls parce qu'il montre la sortie des deux du et ls (dans cet ordre):

$ duls
210M    drwxr-xr-x  21 kk  staff  714 Jun 15 09:32 .

$ duls *
 36K    -rw-r--r--   1 kk  staff    35147 Jun  9 16:03 COPYING
8.0K    -rw-r--r--   1 kk  staff     6962 Jun  9 16:03 INSTALL
 28K    -rw-r--r--   1 kk  staff    24816 Jun 10 13:26 Makefile
4.0K    -rw-r--r--   1 kk  staff       75 Jun  9 16:03 Makefile.am
 24K    -rw-r--r--   1 kk  staff    24473 Jun 10 13:26 Makefile.in
4.0K    -rw-r--r--   1 kk  staff     1689 Jun  9 16:03 README
120K    -rw-r--r--   1 kk  staff   121585 Jun 10 13:26 aclocal.m4
684K    drwxr-xr-x   7 kk  staff      238 Jun 10 13:26 autom4te.cache
128K    drwxr-xr-x   8 kk  staff      272 Jun  9 16:03 build
 60K    -rw-r--r--   1 kk  staff    60083 Jun 10 13:26 config.log
 36K    -rwxr-xr-x   1 kk  staff    34716 Jun 10 13:26 config.status
264K    -rwxr-xr-x   1 kk  staff   266637 Jun 10 13:26 configure
8.0K    -rw-r--r--   1 kk  staff     4280 Jun 10 13:25 configure.ac
7.0M    drwxr-xr-x   8 kk  staff      272 Jun 10 13:26 doc
2.3M    drwxr-xr-x  28 kk  staff      952 Jun 10 13:26 examples
6.2M    -rw-r--r--   1 kk  staff  6505797 Jun 15 09:32 mrbayes-3.2.7-dev.tar.gz
 11M    drwxr-xr-x  42 kk  staff     1428 Jun 10 13:26 src

$ duls doc
7.0M    drwxr-xr-x  8 kk  staff  272 Jun 10 13:26 doc

$ duls [bM]*
 28K    -rw-r--r--  1 kk  staff  24816 Jun 10 13:26 Makefile
4.0K    -rw-r--r--  1 kk  staff     75 Jun  9 16:03 Makefile.am
 24K    -rw-r--r--  1 kk  staff  24473 Jun 10 13:26 Makefile.in
128K    drwxr-xr-x  8 kk  staff    272 Jun  9 16:03 build

Explication:

le paste L'utilitaire crée des colonnes à partir de son entrée en fonction de la spécification que vous lui donnez. Étant donné deux fichiers d'entrée, il les met côte à côte, avec un onglet comme séparateur.

Nous lui donnons la sortie de du -hs -- "$@" | cut -f1 comme le premier fichier (flux d'entrée vraiment) et la sortie de ls -ld -- "$@" comme le deuxième fichier.

Dans la fonction, "$@" va évaluer à la liste de tous les arguments de la ligne de commande, chacun entre guillemets. Il comprendra donc les caractères globaux et les noms de chemins avec des espaces, etc.

Les doubles moins (--) signale la fin des options de ligne de commande du et ls. Sans cela, dire duls -l serait confus du et toute option pour du cette ls n'a pas confondre ls (et les options qui existent dans les deux utilitaires pourraient ne pas signifier la même chose, et ce serait un joli gâchis).

le cut après du supprime simplement la première colonne du du -hssortie (les tailles).

J'ai décidé de mettre le du sortie sur la gauche, sinon j'aurais dû gérer une colonne droite bancale (en raison de la longueur variable des noms de fichiers).

La commande n'acceptera pas les drapeaux de ligne de commande.

Cela a été testé dans les deux bash et en ksh93. Cela ne marchera pas avec /bin/sh.


7
2018-06-25 20:42